2016-09-27 19 views
0

これは私が逃した重複であれば、私は謝罪しますので、SOなどのサイトをかなり検索しました。Oracleの24時間時間を12時間に変換する

与えられた文字列Thu 09/22 15:17:46 PM - PHONE(varchar2データ型のテーブルから来た場合)、私は15:17:46 PMを3:17 PMに変換する必要があります文字列はThu 09/22 3:17 PM - 電話です。

私がデータを取得するために使用しているクエリが(はるかに大きいクエリの一部)である

:のにNoteTextはデータ木9月22日午後03時17分46秒を持っている部分である

(SELECT TO_CHAR (TO_DATE (notetext, 'dd/mm/yyyy hh24:mi:ss'), 'Dy MM/DD') || ' ' || TO_CHAR (TO_DATE (notetext, 'dd/mm/yyyy hh24:mi:ss'), 'hh24:mi:ss AM') || ' - ' || notetype 
       FROM 
       a pnx 
       WHERE 
       pnx.notetype IN ('FAX', 'PHONE') 
       AND pnx.episode = ep.episodenbr 
      ) END)  AS RFIINDICATOR 

PMとnotetypeのデータはPHONEです。両方ともvarchar2データ型です。私は、時間の部分を引き出す抽出機能を呼び出そうとしています

は、無効な番号エラーまたは他のいくつかのOracleエラーを得

to_char (RFIINDICATOR, 'HH12:MI:SS PM') 

すべて行います。

提案がありますか?前もって感謝します。

答えて

0

多分これ(この猫を肌する多くの方法の一つだけ)のようなもの:返信用

with 
    inputs (str) as (
     select 'Thu 09/22 15:17:46 PM - PHONE' from dual union all 
     select 'Thu 09/22 9:17:46 AM - PHONE' from dual 
    ), 
    fragments (str, dt, other) as (
     select str, substr(str, 1, instr(str, ' ', 1, 3) - 1), 
       substr(str, instr(str, ' ', 1, 4)) 
     from inputs 
    ) 
select str, to_char(to_date(dt, 'Dy mm/dd hh24:mi:ss'), 'Dy mm/dd hh:mi:ssAM') || 
                     other as new_str 
from fragments 
; 

STR       NEW_STR 
----------------------------- ------------------------------ 
Thu 09/22 15:17:46 PM - PHONE Thu 09/22 03:17:46PM - PHONE 
Thu 09/22 9:17:46 AM - PHONE Thu 09/22 09:17:46AM - PHONE 
+0

感謝。既存の膨大なクエリにロジックを追加しようとしています。 – user2607902

関連する問題