質問

次のクエリを実行していますが、空の行が返されます。ただし、テーブルに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 ';

役に立ちましたか?

解決

私は現時点では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';

他のヒント

upd_timeが正確に12-MAR-08ではない可能性があります。日付形式は時間コンポーネントを表示していませんが、おそらくそこにあります(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');

行う場合も同じですか

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

upd_timeは日付ではなく、タイムスタンプである可能性があります。そのため、実際にはたとえば同じものではない'12 -MAR-08 05:30 'が含まれます。 trunc()はタイムスタンプの時間部分を削除します。

エラーを返さないため、日付を正しく解析すると仮定しますが、そうでない場合は to_date('12 -MAR-08 '、' DD-MON-YY ')で試すことができます

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

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

次に、Oracleの&quot; Date&quot;を考慮する必要があります。データ型には、最も近い秒までの時間情報も含まれます。つまり、最初の手順で作成された日付は、実際には3月12日の午前0時です。したがって、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');

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top