2

ここでちょっと立ち往生。次の SQL クエリを実行するとします。

select to_char(sysdate, 'DD/MON/YY') || ' 15:32:00' from dual;

結果は次のようになります。

08/NOV/12 15:32:00

ここで、その結果を取得して to_date 関数で使用したいと思います (理由については長い話ですが、すぐに詳しく説明します)。

select to_date((to_char(sysdate, 'DD/MON/YY') || ' 15:32:00'), 'DD/MON/YY HH24:MI:SS') from dual;

結果が前のものと同じになることを期待していましたが、そうではありませんでした。代わりに、これは私に与えます:

08/NOV/12

質問は次のとおりです: to_char(sysdate, 'DD/MON/YY') の連結と HH24:MI:SS の組み合わせを to_date で使用する方法はありますか?

追加の用途がある場合とない場合がある追加の詳細: これを行う必要がある理由は、SLA 時間のテーブルを持つクエリが提供されたためです。形式は HH24:MI の単なる時間ですが、DATETIME 型ではありません (VARCHAR であると思われますが、分析できない何らかのビューまたは関数である可能性が高いため、はっきりとは言えません。部分的には私が原因です) DBユーザーのために必要なアクセス権を持っていない方法と部分的に私にはわかりません。

編集:上記をもう一度読んで、いくつかの追加の詳細を省略したことに気付きました(これは私の質問とはまったく関係がないと思いますが):今日の日付(DD / MON / YY)を取得し、それをSLA時間と組み合わせますHH:MI の :SS の ':00' と結合し、すべてを日付に変換してから、結果の abomination と返された各行の終了時刻を比較します。終了時間が私のコンビネーションとコンバージョンデラックスよりも大きい/新しい/遅い場合は、具体的なものを返します。そうでない場合は、「すべてOK」のようなものを返します。それが理にかなっているかどうかはわかりませんが、要約すると、別の DATETIME 型と比較するために使用できるものを取得したいので、何らかの方法で SLA 時刻も DATETIME 型に変換する必要があると思います。

これに関するヘルプは大歓迎です。

4

2 に答える 2

2

表示される出力はchar形式に変換されます。これは、NLS_DATE_FORMAT設定によって決定されます。内部的には、日付には引き続き時刻形式が関連付けられます。だからそれを見るためにこれをしなさい:

SQL> select sysdate from dual;

SYSDATE
---------
08-NOV-12

SQL> alter session set nls_date_format='dd/MON/yy hh24:mi:ss';

Session altered.

SQL> select sysdate from dual;

SYSDATE
------------------
08/NOV/12 11:41:46
于 2012-11-08T11:42:51.577 に答える
2

デフォルトの日付形式は「DD/MM/YY」です。時間コンポーネントを表示する場合は、正しい日付形式を使用する必要があります。

select to_char(to_date((to_char(sysdate, 'DD/MON/YY') || ' 15:32:00'), 'DD/MON/YY HH24:MI:SS'),'DD/MM/YY HH24:MI:SS') from dual
于 2012-11-08T11:43:52.887 に答える