Sql 如何将非标准字符串格式化为日期格式
是否有办法选择字符串“2018年1月3日”和“2017年11月9日”,以便结果均为“MM/DD/YYYY”格式Sql 如何将非标准字符串格式化为日期格式,sql,oracle,Sql,Oracle,是否有办法选择字符串“2018年1月3日”和“2017年11月9日”,以便结果均为“MM/DD/YYYY”格式 结果也可以是字符串。您可以使用大小写表达式。假设所有值都采用这两种格式之一,则可以通过执行以下操作将其转换为日期: select (case when col like '%-%-%' then to_date(col, 'MM/DD/YYYY') else to_date(col, 'DD-MON-YY') end) 我更喜欢日期格式的值。
结果也可以是字符串。您可以使用
大小写
表达式。假设所有值都采用这两种格式之一,则可以通过执行以下操作将其转换为日期:
select (case when col like '%-%-%' then to_date(col, 'MM/DD/YYYY')
else to_date(col, 'DD-MON-YY')
end)
我更喜欢日期格式的值。您可以使用
to_char()
转换为您选择的字符串格式。无需使用正则表达式-像这样的普通可以选择日期格式
范例
with my_data as (
select '03/01/2018' dt from dual union all
select '09-NOV-17' from dual)
select
dt,
case when dt like '__/__/____' then to_date(dt,'dd/mm/yyyy')
when dt like '__-___-__' then to_date(dt,'dd-mon-rr')
end as dt_date
from my_data;
我从来没有听说过正则表达式<代码>'%-%-%'
,你能详细解释一下吗?也许你的意思是像“%-%-%”这样的@WernfriedDomscheit。我真傻。我打算用正则表达式来寻找正确的格式。然后我意识到,like
也可以,因为对值有两种格式之一的限制。我把它改成了像
。
DT DT_DATE
---------- -------------------
03/01/2018 03.01.2018 00:00:00
09-NOV-17 09.11.2017 00:00:00