我有一个名为日期的列 在本专栏中,我有多种日期格式,如下所示:
2017-06-14
15年4月9日
列类型为varchar。
我想在日期时间使用以下格式转换此列:
yyyy-mm-dd
当我在同一列上使用两种不同的格式时,我不知道该怎么做。
您可以帮忙吗?
答案 0 :(得分:1)
尝试使用FORMAT(CAST(@yourVarchar AS DATETIME), N'yyyy-MM-dd')
功能:
DECLARE @f varchar(50) = '2017-06-14'
SELECT FORMAT(CAST(@f AS DATETIME), N'yyyy-MM-dd')
输出:
2017-06-14
和您的第二种情况:
DECLARE @a varchar(50) = '04/09/15'
SELECT FORMAT(CAST(@a AS DATETIME), N'yyyy-MM-dd')
输出:
2015-04-09
答案 1 :(得分:1)
每种字符串表示格式都可能需要自己的转换日期样式,因此:
with cte as (
select '2017-06-14' DateString
union all
select '04/09/15' -- expected dateformat: dd/mm/yy
)
select
case when DateString like '%-%-%' then CONVERT(DATE, DateString, 20) -- ODBC canonical
when DateString like '%/%/%' then CONVERT(DATE, DateString, 3) -- French
else null
end
from cte
结果至:
2017-06-14
2015-09-04
答案 2 :(得分:0)
如果所有格式均有效,则简单的投射就可以使用
with cte as(
select '2017-06-14' as val
union all
select '04/09/15' as val
)
select val, cast(val as date) from cte
2015年4月9日将转换为4月9日或9月4日,具体取决于您的数据库语言
答案 3 :(得分:0)
对于大于或等于sql-server
的{{1}}版本,您可以使用2012
,
parse()
或者select parse([date] as date using 'en-US') from [your_table]
,它更健壮,
try_parse()