2016-09-01 8 views
0
select ktl.id, kth.trans_dte, kth.trtype, kp.match_code,ktl.net_amount,ktl.gross_amount,ktl.db_portfolio_type,ktl.cr_portfolio_type from k$transaction_lines ktl 
    left join k$transaction_header kth on ktl.id=kth.id 
    left join k$portfolio kp on kp.id = (CASE WHEN ktl.db_portfolio_type = 'C' THEN ktl.db_portfolio ELSE ktl.cr_portfolio END) 
    where to_char(kth.trans_dte,'DD-MON-YY') >= '22-AUG-16' 
    and to_char(kth.trans_dte,'DD-MON-YY') <= '27-AUG-16' 
    and ktl.db_portfolio_type <> 'I' 
    and ktl.cr_portfolio is not null 
    order by kth.trans_dte, ktl.id, kp.match_code, kth.trtype 

Это мой запрос. Я просто хочу знать, есть ли у меня что-то не так с моим предложением clth.trans_dte. Я только хочу получить Сделки с 22 августа по 27 августа, но я получаю транзакции до этой даты, февраль и марш включены, когда их не должно быть. Интересно, почему .. Есть ли проблема с моим кодом или это что-то с db, которого я не знаю. Благодаря!SQL-запрос между двумя датами, показывающими даже те, которые не совпадают между

+2

'to_char (kth.trans_dte, 'DD-MON-YY')> = '22 -AUG-16'' должно быть: kth.trans_dte> = to_date ('22 -AUG-16 ',' DD-MON -YYY ') 'или даже лучше (более надежный):' th.trans_dte> = to_date (' 2016-08-22, 'YYYY-MM-DD') '. Не сравнивайте даты как строки, сравнивайте их как даты –

ответ

0

попробуйте использовать МЕЖДУ вместо 2 условий.

0
select ktl.id, kth.trans_dte, kth.trtype, kp.match_code,ktl.net_amount,ktl.gross_amount,ktl.db_portfolio_type,ktl.cr_portfolio_type from k$transaction_lines ktl 
    left join k$transaction_header kth on ktl.id=kth.id 
    left join k$portfolio kp on kp.id = (CASE WHEN ktl.db_portfolio_type = 'C' THEN ktl.db_portfolio ELSE ktl.cr_portfolio END) 
    where (to_char(kth.trans_dte,'DD-MON-YY') >= '22-AUG-16' 
    and to_char(kth.trans_dte,'DD-MON-YY') <= '27-AUG-16') 
    and ktl.db_portfolio_type <> 'I' 
    and ktl.cr_portfolio is not null 
    order by kth.trans_dte, ktl.id, kp.match_code, kth.trtype 

Попробуйте это.

1

вы преобразуете свое поле в char с помощью to_char, а затем попытаетесь сравнить его по дате. to_char делает именно то, что он говорит - преобразует в строку полукокса, так что вы получите даты в соответствии с ASCii представлением строки

попробуйте использовать TO_DATE вместо этого - с обеих сторон условия (ы)

+1

да, мы выяснили это в то же время :) спасибо! Hehehehe –

0

пытаются с помощью between Ключевое слово и to_date функция в запросе, как

where kth.trans_dte between to_date('22-AUG-16') 
and to_date('27-AUG-16') 
and ktl.db_portfolio_type <> 'I' 
and ktl.cr_portfolio is not null 
order by kth.trans_dte, ktl.id, kp.match_code, kth.trtype 
0

К сожалению, я решил только сейчас. Я не могу использовать to_char при выполнении этого условия, поэтому он дает неправильные результаты.

 Смежные вопросы

  • Нет связанных вопросов^_^