2017-11-07 10 views
0

日付が2つの特定の日付の間にあるOracleデータベースから行を取得しようとしています。私が使用しています2日間の日付を持つ行を検索する

FIRST_ACTIVE_TS 
--------------- 
17-11-07 
17-11-07 

問合せ:

select first_active_ts from <Table name> where TRUNC(first_active_ts) 
between TO_DATE('2017-11-06','YYYY-MM-DD') and TO_DATE('2017-11-08','YYYY-MM-DD'); 

しかし、クエリが0の行を返します。

+0

正しくTRUNCを使用していますか?これについて – dan6657

+0

何が '

TO_DATE(first_active_ts、 'YYYY-MM-DD')TO_DATE( '2017年11月6日'、 'YYYY-MM-DD')とTO_DATEの間 ( '2017- FROM first_active_tsに を選択します11-08 '、' YYYY-MM-DD ');' – XING

答えて

2
select first_active_ts 
from <Table name> 
where first_active_ts >= DATE '2017-11-06'      -- Start date 
AND first_active_ts < DATE '2017-11-08' + INTERVAL '1' DAY; -- End date+1 day 

しかし、クエリが0の行を返します。

お客様の日付はRR-MM-DDの形式で表示されています。 TO_CHAR(first_active_ts, 'YYYY-MM-DD')を使用して表示すると、年が誤って2017ではなく0017と入力されていることがあります。この場合、クエリはゼロ行を正しく返しているため、データを修正する必要があります。

+0

実際には部分的にあなたはそれを正しく得ました。私がcharを使って印刷したとき、それは "0007-11-17"を示しました。だから、なぜ基本的に07の代わりに0007と日付を取っているのか知りません。 –

+0

@SrijanSharmaあなたは 'DD-MM-YYYY'入力を持っていて、ユーザは' 17-11-07'を入力していて、 '07'は' 7あなたは間違った年を取る。有効な日付が入力されるように強制する必要があります(データベースに制約があるか、日付が入力されるUIを更新して通年が必要か、その両方)。 – MT0

+0

問題を解明してくれてありがとう。長い間立ち往生していた。 –

0
SELECT FIRST_ACTIVE_TS FROM <TABLE_NAME> WHERE FIRST_ACTIVE_TS BETWEEN 
TO_DATE('2017-11-06','YYYY-MM-DD') AND TO_DATE('2017-11-08','YYYY-MM-DD'); 
+0

これは日付が '2017-11-08 00:00:01'と' 2017-11-08 23:59:59'の間の行を取得しません – MT0

+0

私はこのスクリプトを正しく試しました。私はOracle 11g。 –

関連する問題