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