2016-08-08 14 views
0

PL SQLでタイムスタンプを日付に変換する必要があります。 webserviceから '2016-08-01T09:16:47.000'と入力されました。 '8/01/2016 9:16:47 AM'が必要です。 私はVARCHAR2として入力します。タイムスタンプからミリ秒を削除する

「AM」または「PM」にすることができます。

デュアルからの選択TRUNC(to_timestamp( '2016-08-01T09:16:47.000'、 'YYYY-MM-DD' T "HH24:MI:SS.ff3 '))を使用してみました。時間部分は削除されます。

+0

あなたの実際のコードを表示してください - 構文的に有効ではありませんのようにあなたが完全に失敗していまし掲載するもの。 –

+0

デュアルからのTRUNC(to_timestamp( '2016-08-01T09:16:47.000'、 'YYYY-MM-DD' T "HH24:MI:SS.ff3 '))を選択します。 –

+0

質問タグは、最良の答えを与えることができるようにSQLでなければなりません。あまりタグの付いていない質問にはうまく対応していません。 – XING

答えて

1
select to_char(to_timestamp('08/01/2016 09:16:47.000000000 AM', 'MM/DD/YYYY HH:MI:SS.FF AM'),'MM/DD/YYYY HH:MI:SS AM') from dual; 

編集:これは、午前または午後

select to_char(to_timestamp('08/01/2016 09:16:47.000000000 PM', 'MM/DD/YYYY HH:MI:SS.FF AM'),'MM/DD/YYYY HH:MI:SS AM') from dual; 
+0

Upvoteあなたは最初にそれに答えていましたか?クレジットはあなたに行きます。 – XING

+0

"AM"または "PM"にすることができます。 –

+0

これはamまたはpmで動作します。 – JDro04

0

truncの代わりにto_charを使用する必要があります。あなたの例で は、正しい動作は次のようになります - to_char('08/01/2016 09:16:47.000000000 AM','dd:mm:yyyy hh:mi:ss am')

+0

ここではNLSの設定を想定していますか? ''08/01/2016 09:16:47.000000000 AM''はタイムスタンプではない文字列です。実行すると' ORA-01722:無効な番号 'が表示されます。 –

1

あなたのクエリのために働く:

select TRUNC(to_timestamp('2016-08-01T09:16:47.000','YYYY-MM-DD"T"HH24:MI:SS.ff3')) 
    from dual; 

date値を返します。どのように表示するかは、それを文字列に変換するために使用するマスクの形式の問題です。フォーマットマスクなしでは、デフォルトのNLS設定が使用される。私が手:私のNLS_DATE_FORMAT設定becaiuse

SQL> select TRUNC(to_timestamp('2016-08-01T09:16:47.000','YYYY-MM-DD"T"HH24:MI:SS.ff3')) 
    from dual; 

TRUNC(TO_ 
--------- 
01-AUG-16 

は現在、 'DD-MON-RR' です。

1 select TO_CHAR(TRUNC(to_timestamp('2016-08-01T09:16:47.000','YYYY-MM-DD"T"HH24:MI:SS.ff3') 
    2     'YYYY-MM-DD HH:MI:SS AM') 
    3* from dual; 

TO_CHAR(TRUNC(TO_TIMES 
---------------------- 
2016-08-01 12:00:00 AM 

それは完全に時間を取り外すようtruncを使用することは間違っていたことを示しています。明示的な書式マスクを使用します。だから、:これはまた、PMの時間のために働く

1 select TO_CHAR(to_timestamp('2016-08-01T09:16:47.000','YYYY-MM-DD"T"HH24:MI:SS.ff3'), 
    2     'YYYY-MM-DD HH:MI:SS AM') 
    3* from dual; 

TO_CHAR(TO_TIMESTAMP(' 
---------------------- 
2016-08-01 09:16:47 AM 

注:

1 select TO_CHAR(to_timestamp('2016-08-01T13:16:47.000','YYYY-MM-DD"T"HH24:MI:SS.ff3'), 
    2     'YYYY-MM-DD HH:MI:SS AM') 
    3* from dual; 

TO_CHAR(TO_TIMESTAMP(' 
---------------------- 
2016-08-01 01:16:47 PM 
+0

を使用してください。他の場合には「PM」とすることもできます。 –

+0

問題はありません - 更新された回答を参照してください –

+0

うまく動作します。ありがとうございました!! –

関連する問題