将DD / MMM / YYYY日期转换为YYYY-MM-DD-SQL Server

时间:2019-10-02 13:13:40

标签: sql sql-server date

我正在尝试选择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',但我宁愿这只是空白。有办法吗?

为任何帮助加油。

祝一切顺利,

马特

1 个答案:

答案 0 :(得分:0)

在T-SQL中,可以使用CONVERT命令将日期格式化为其他格式。你可以尝试

select convert(varchar, datefield, 23)

这会将您的日期转换为所需的格式(例如2006-12-30)。

您还可以使用FORMAT进行相同操作:

select format(datefield, 'dd-MM-yy') as date