質問
次のクエリを実行していますが、空の行が返されます。ただし、テーブルに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をお勧めします探しているデータは、検索にインデックスを使用する可能性を高めるため、データベースで見つけることができるものと同様です。