2017-03-22 9 views
0

oracleに日付書式の列にsubstringを使用することは許されないと私は先生と議論しました。 substrは日付ではなく文字列で使用する必要があるためです。これについてあなたの意見は?クエリはこのだったSubstr on date oracle

Lists those guest who were in one of our apartment at his/her birthday 

select * 
from ACCOMODATION.GUEST 
    JOIN ACCOMODATION.RESERVATION ON (USERNAME = GUEST_FK) 
where to_date(CONCAT(SUBSTR(ACCOMODATION.RESERVATION.ARRIVAL,0,2), substr(BDAY, 3, length(BDAY)))) 
     between ACCOMODATION.RESERVATION.ARRIVAL and ACCOMODATION.RESERVATION.LEAVE ; 

ACCOMODATION.RESERVATION.ARRIVALACCOMODATION.RESERVATION.LEAVEBDAYコメントのように日付

+0

を持っているあなたの列 'ACCOMODATION.RESERVATION.ARRIVAL'と' ACCOMODATION.RESERVATION.LEAVE'のデータ型は何ですか? – FDavidov

+0

今日のヒント:テーブルエイリアス。 (質問をより簡単に書いて読みやすくする) – jarlh

+3

ところで、あなたの先生は絶対に、完全に、100%正しい!!!! – FDavidov

答えて

0

で、日付のTO_CHARを試し

TASTは、ということでした。すでにcharとして保存されている場合、あなたは大きな問題

select AG.*, AR.* 
from ACCOMODATION.GUEST AG 
INNER JOIN ACCOMODATION.RESERVATION AR 
    ON (USERNAME = GUEST_FK) 
where (to_char(AR.LEAVE, 'MMDD') > to_char(AR.ARRIVAL, 'MMDD') 
     and to_char(AG.BDAY, 'MMDD') 
      between to_char(AR.ARRIVAL, 'MMDD') 
        and to_char(AR.LEAVE, 'MMDD')) -- for those who did not stay over the new year 
or (to_char(AR.LEAVE, 'MMDD') < to_char(AR.ARRIVAL, 'MMDD') -- for those who stayed over new year 
    and (to_char(AG.BDAY, 'MMDD') >= to_char(AR.ARRIVAL, 'MMDD') 
     or to_char(AG.BDAY, 'MMDD') <= to_char(AR.LEAVE, 'MMDD'))) 
+0

はい、まずこのようなことを教えましたが、それを解決する簡単な方法があるように感じました。しかし、私は間違っていた。 – Daniel