oracle sql中值的子字符串

oracle sql中值的子字符串,sql,oracle,Sql,Oracle,我有这个价值: 1970年1月1日星期四01:00:00 UZT 我需要上述值中的该值: 1970年1月4日 需要此值的子字符串。看起来像字符串。如果是这样,这里有一个(实际上是两个)选项: [编辑] 如何将其转换为其他格式?通过将应用于_DATE(将字符串“Thu Jan 1970”转换为有效的日期格式),然后使用适当的格式掩码将应用于_CHAR,以获得所需内容 SQL> with test (col) as 2 (select 'Thu Jan 01 01:00:00 UZT

我有这个价值:

1970年1月1日星期四01:00:00 UZT

我需要上述值中的该值:

1970年1月4日

需要此值的子字符串。

看起来像字符串。如果是这样,这里有一个(实际上是两个)选项:

[编辑]

如何将其转换为其他格式?通过将
应用于_DATE
(将字符串“Thu Jan 1970”转换为有效的日期格式),然后使用适当的格式掩码将
应用于_CHAR
,以获得所需内容

SQL> with test (col) as
  2    (select 'Thu Jan 01 01:00:00 UZT 1970' from dual),
  3  inter as
  4    (select substr(col, 1, instr(col, ' ', 1, 2)) || substr(col, -4) result,
  5            regexp_substr(col, '(\w+ ){2}') || regexp_substr(col, '\d+$') result2
  6     from test
  7    )
  8  select to_char(to_date(result, 'dy mon yyyy', 'nls_date_language = english'), 'dd-mm-yyyy') new_result
  9  from inter;

NEW_RESULT
----------
01-01-1970

SQL>

使用
输入日期
然后使用
输入字符

SELECT TO_CHAR(
         TO_DATE(
           'Thu Jan 01 01:00:00 UZT 1970',
           'Dy Mon DD HH24:MI:SS "UZT" YYYY'
         ),
         'Dy Mon YYYY'
       ) AS substring
FROM   DUAL
或者,如果您需要考虑时区(根据需要替换时区值):


此值存储为什么类型?到目前为止,您尝试过什么?我希望您没有将该值存储在
varchar
列中-该列应该是
日期
timsetamp
。然后,当选择如何更改为“DD-MM-YYYY”时,将
应用于列上的_char()
即可轻松地重新格式化显示。我已经修改了我的答案,请看一看。我在SQL Plus中试用过,效果很好。但当我尝试在Oracle表单文本字段项日期列数据类型“CHAR”中输入时,当按下按钮触发时出错。你可以从这个链接看到代码,谢谢你的回答。我有一些列“UZT”和一些“UZST”,然后在“UZST”上出错
SELECT TO_CHAR(
         TO_DATE(
           'Thu Jan 01 01:00:00 UZT 1970',
           'Dy Mon DD HH24:MI:SS "UZT" YYYY'
         ),
         'Dy Mon YYYY'
       ) AS substring
FROM   DUAL
| SUBSTRING | | :----------- | | Thu Jan 1970 |
SELECT TO_CHAR(
         TO_DATE(
           REPLACE( your_column, 'UZST', 'UZT' ),
           'Dy Mon DD HH24:MI:SS "UZT" YYYY'
         ),
         'Dy Mon YYYY'
       ) AS substring
FROM   your_table
SELECT TO_CHAR(
         TO_TIMESTAMP_TZ(
           REPLACE(
             REPLACE(
               your_column,
               'UZST',
               '+05:00'
             ),
             'UZT',
             '+05:00'
           ),
           'Dy Mon DD HH24:MI:SS TZH:TZM YYYY'
         ) AT TIME ZONE '+05:00',
         'Dy Mon YYYY'
       ) AS substring
FROM   your_table