如何将字符串(Thu Mar 16 11:30:13 IST 2017)转换为Oracle中所需的格式

时间:2017-03-16 06:46:03

标签: oracle

我有一个上述格式的字符串。 需要为Oracle形成一个选择查询,以DD / MON / YYYY HH24显示日期:MI:SS

2 个答案:

答案 0 :(得分:2)

这将把它作为日期:

SELECT TO_DATE(
         'Thu Mar 16 11:30:13 IST 2017',
         'DY MON DD HH24:MI:SS "IST" YYYY'
       )
FROM   DUAL;

这将以您想要的格式对其进行格式化:

SELECT TO_CHAR(
         TO_DATE(
           'Thu Mar 16 11:30:13 IST 2017',
           'DY MON DD HH24:MI:SS "IST" YYYY'
         ),
         'DD/MON/YYYY HH24:MI:SS'
       )
FROM   DUAL;

答案 1 :(得分:0)

您需要时区IST吗?问题是,这是不明确的:

SELECT tzName, tzabbrev, TZ_OFFSET(tzName)
FROM v$timezone_names 
WHERE tzabbrev = 'IST';

TZNAME  TZABBREV    TZ_OFFSET(TZNAME)
Asia/Calcutta   IST +05:30
Asia/Colombo    IST +05:30
Asia/Dacca  IST +06:00
Asia/Dhaka  IST +06:00
Asia/Gaza   IST +02:00
Asia/Hebron IST +02:00
Asia/Jerusalem  IST +02:00
Asia/Karachi    IST +05:00
Asia/Kathmandu  IST +05:45
Asia/Katmandu   IST +05:45
Asia/Kolkata    IST +05:30
Asia/Tel_Aviv   IST +02:00
Asia/Thimbu IST +06:00
Asia/Thimphu    IST +06:00
Atlantic/Reykjavik  IST +00:00
Eire    IST +00:00
Europe/Dublin   IST +00:00
Iceland IST +00:00
Israel  IST +02:00

假设它始终是本地时间和时区值可以忽略。在这种情况下,你可以使用这个:

TO_DATE(
   REGEXP_REPLACE(
      'Thu Mar 16 11:30:13 IST 2017', 
      '\w+ +(\w+) +(\d+) +(\d{2}:\d{2}:\d{2}).+(\d{4})', 
      '\1 \2 \3 \4'), 
   'Mon dd hh24:mi:ss yyyy', 'NLS_DATE_LANGUAGE = american')

结果将根据您当前的NLS_DATE_FORMAT设置。可以通过

更改ALTER SESSION SET NLS_DATE_FORMAT = 'DD/MON/YYYY HH24:MI:SS'或上面的表达式
TO_CHAR(TO_DATE(...), 'DD/MON/YYYY HH24:MI:SS')