我正在尝试选择DD / MMM / YYYY格式的日期字段并将其转换为YYYY-MM-DD格式。
我尝试了几种不同的方法,最后想出了一个非常ham脚的方法:
CASE when (
datefromparts((Right(datefield, 4)), (CASE
when(SUBSTRING(CONVERT(NVARCHAR(10), datefield), 4, 3)) = 'JAN' then '01'
when(SUBSTRING(CONVERT(NVARCHAR(10), datefield), 4, 3)) = 'FEB' then '02'
when(SUBSTRING(CONVERT(NVARCHAR(10), datefield), 4, 3)) = 'MAR' then '03'
when(SUBSTRING(CONVERT(NVARCHAR(10), datefield), 4, 3)) = 'APR' then '04'
when(SUBSTRING(CONVERT(NVARCHAR(10), datefield), 4, 3)) = 'MAY' then '05'
when(SUBSTRING(CONVERT(NVARCHAR(10), datefield), 4, 3)) = 'JUN' then '06'
when(SUBSTRING(CONVERT(NVARCHAR(10), datefield), 4, 3)) = 'JUL' then '07'
when(SUBSTRING(CONVERT(NVARCHAR(10), datefield), 4, 3)) = 'AUG' then '08'
when(SUBSTRING(CONVERT(NVARCHAR(10), datefield), 4, 3)) = 'SEP' then '09'
when(SUBSTRING(CONVERT(NVARCHAR(10), datefield), 4, 3)) = 'OCT' then '10'
when(SUBSTRING(CONVERT(NVARCHAR(10), datefield), 4, 3)) = 'NOV' then '11'
when(SUBSTRING(CONVERT(NVARCHAR(10), datefield), 4, 3)) = 'DEC' then '12'
else (
datefromparts((Right(datefield, 4)), (CASE
when(SUBSTRING(CONVERT(NVARCHAR(10), datefield), 4, 3)) = 'JAN' then '01'
when(SUBSTRING(CONVERT(NVARCHAR(10), datefield), 4, 3)) = 'FEB' then '02'
when(SUBSTRING(CONVERT(NVARCHAR(10), datefield), 4, 3)) = 'MAR' then '03'
when(SUBSTRING(CONVERT(NVARCHAR(10), datefield), 4, 3)) = 'APR' then '04'
when(SUBSTRING(CONVERT(NVARCHAR(10), datefield), 4, 3)) = 'MAY' then '05'
when(SUBSTRING(CONVERT(NVARCHAR(10), datefield), 4, 3)) = 'JUN' then '06'
when(SUBSTRING(CONVERT(NVARCHAR(10), datefield), 4, 3)) = 'JUL' then '07'
when(SUBSTRING(CONVERT(NVARCHAR(10), datefield), 4, 3)) = 'AUG' then '08'
when(SUBSTRING(CONVERT(NVARCHAR(10), datefield), 4, 3)) = 'SEP' then '09'
when(SUBSTRING(CONVERT(NVARCHAR(10), datefield), 4, 3)) = 'OCT' then '10'
when(SUBSTRING(CONVERT(NVARCHAR(10), datefield), 4, 3)) = 'NOV' then '11'
when(SUBSTRING(CONVERT(NVARCHAR(10), datefield), 4, 3)) = 'DEC' then '12'
else isnull(datefield,'') end), (Left(datefield, 2))))
end [Date Field Name],
由于空日期似乎是1900-01-01而出现重复。
两个问题:
这样做的正确方法是什么?
这现在将Null结果导出为'NULL',但我宁愿这只是空白。有办法吗?
为任何帮助加油。
祝一切顺利,
马特
答案 0 :(得分:0)
在T-SQL中,可以使用CONVERT命令将日期格式化为其他格式。你可以尝试
select convert(varchar, datefield, 23)
这会将您的日期转换为所需的格式(例如2006-12-30)。
您还可以使用FORMAT进行相同操作:
select format(datefield, 'dd-MM-yy') as date