0

以下のクエリを実行していますが、空白の行が返されますが、テーブルにupd_time='12-MAR-08'のレコードがあります。日付'12-MAR-08が返されない理由がわかりません。 '。私を助けてください??

SELECT br_data.upd_time FROM BANKREC.br_data where br_data.upd_time = '12 -MAR-08';

4

4 に答える 4

2

upd_timeは正確には2008年3月12日ではない可能性があります。日付形式は時刻コンポーネントを表示していませんが、おそらくそこにあります(OracleのDATEデータ型には日付と時刻の両方のコンポーネントを含めることができます)。

これを試してください(時間コンポーネントを確認できます):

alter session set nls_date_format='DD-MON-YY HH24:MI:SS';

SELECT br_data.upd_time FROM BANKREC.br_data
where br_data.upd_time >= to_date('12-MAR-08','DD-MON-YY')
and br_data.upd_time < to_date('13-MAR-08','DD-MON-YY');
于 2009-10-27T15:36:05.513 に答える
1

Oracleの関数を使用して、を使用して文字列を日付に適切に変換する必要があります。

to_date('12-MAR-08', 'DD-MMM-YY')

次に、Oracleの「Date」データ型には秒単位の時間情報も含まれていることを考慮する必要があります。これは、最初のステップで作成された日付が実際には3月12日の深夜であることを意味します。したがって、upd_timeが深夜に切り捨てられていることを確認する必要があります。

trunc(upd_time, 'DAY') = to_date('12-MAR-08', 'DD-MMM-YY')

完全なクエリは次のようになります

SELECT br_data.upd_time 
FROM BANKREC.br_data 
WHERE trunc(upd_time, 'DAY') = to_date('12-MAR-08', 'DD-MMM-YY');

この猫のスキンを作成する方法は他にもありますが(updTime列をで適切なcharフィールドに転送できますto_char(upd_time, 'DD-MMM-YY'))、通常は、データベースで見つけることができるものと同様のデータを作成することをお勧めします。これにより、使用する可能性が高くなります。ルックアップのインデックス。

于 2009-10-27T20:53:44.560 に答える
1

あなたがする場合も同じですか

SELECT br_data.upd_time FROM BANKREC.br_data 
       where trunc(br_data.upd_time) = '12-MAR-08';

upd_timeは日付ではなくタイムスタンプである可能性があるため、実際には、たとえば「2008年3月12日05:30」が含まれていますが、これは同じではありません。trunc()タイムスタンプの時間部分を削除します。

エラーを返さないので、日付を正しく解析すると思いますが、それ以外の場合は、to_date('12-MAR-08','DD-MON-YY')

于 2009-10-27T07:25:27.960 に答える
0

現在、Oracle DBにアクセスできませんが、to_charを使用したことを覚えています。

試す

SELECT br_data.upd_time FROM BANKREC.br_data where to_char(br_data.upd_time, 'DD-MON-YY') = '12-MAR-08';
于 2009-10-27T07:25:52.497 に答える