web-dev-qa-db-ja.com

Oracle SQLの指定されたタイムスタンプからのみ日付を抽出します

次のクエリ:

select cdate from rprt where cdate <= TO_CHAR(sysdate, 'YYYY/MM/DD-HH24-MI-SS-SSSSS') and ryg='R' and cnum='C002';

戻り値:2013/04/27-10:06:26:794はテーブルに保存されています。

私は日付を次のようにのみ取得したい:27-04-2013そして、resdate dateとsysdateの間の日数を取得します。

14
kumarprd

タイムスタンプから日付に変換するには、関数cast()を使用します

select to_char(cast(sysdate as date),'DD-MM-YYYY') from dual;

関数キャストOracle11gの詳細については http://docs.Oracle.com/cd/B28359_01/server.111/b28286/functions016.htm#SQLRF51256

20
Fernando.

これは、TO_DATE()の目的です。タイムスタンプを日付に変換します。

TO_DATE(sysdate)の代わりにTO_CHAR(sysdate, 'YYYY/MM/DD-HH24-MI-SS-SSSSS')を使用してください。

SQLFiddleデモ

[〜#〜] update [〜#〜]

更新ごとに、cdate列は実際のDATEまたはTIMESTAMPタイプではなく、VARCHAR2です。文字列型を使用して日付を保持することはあまり良い考えではありません。日付で他のすべての種類の数学を検索、比較、実行するのは非常に不便で、遅いです。

cdateVARCHAR2フィールドを実際のTIMESTAMPに変換する必要があります。コード以外にこのフィールドに他のユーザーがいない場合、次のようにcdateをタイムスタンプに変換できます。

BEGIN TRANSACTION;
-- add new temp field tdate:
ALTER TABLE mytable ADD tdate TIMESTAMP;
-- save cdate to tdate while converting it:
UPDATE mytable SET tdate = to_date(cdate, 'YYYY-MM-DD HH24:MI:SS');

-- you may want to check contents of tdate before next step!!!

-- drop old field
ALTER TABLE mytable DROP COLUMN cdate;
-- rename tdate to cdate:
ALTER TABLE mytable RENAME COLUMN tdate TO cdate;
COMMIT;

SQLFiddle Demo

9
mvp

このタイプのフォーマットを試してください:

SELECT to_char(sysdate,'dd-mm-rrrr') FROM dual
1
Shailesh

下記のようにタイムスタンプを日付に変換すると、確実に動作します-

select TO_DATE(TO_CHAR(TO_TIMESTAMP ('2015-04-15 18:00:22.000', 'YYYY-MM-DD HH24:MI:SS.FF'),'MM/DD/YYYY HH24:MI:SS'),'MM/DD/YYYY HH24:MI:SS') dt from dual
1
AB Sikarwar

タイムスタンプ列の値を日付データ型として戻すには、次のようなものを使用します。

select trunc(my_timestamp_column,'dd') as my_date_column from my_table;
0
Frank Staheli

この形式は、前述の日付形式、つまりMM/DD/YYYY

SELECT to_char(query_date,'MM/DD/YYYY') as query_date 
FROM QMS_INVOICE_TABLE;
0
Tarun Verma