从datetime字段中删除年份,月份和日期作为int

时间:2017-09-13 10:46:52

标签: sql sql-server datetime

我需要删除部分日期(存储在我的数据库表中作为日期时间字段),格式为' YYYYMMDD'。我希望输出是一个整数。

例如,日期时间2017-03-28 20:44:35.000将转换为20170328。

这是我到目前为止的尝试:

CAST(
            CAST(DATEPART(year,transcriptCreationDateUTC) AS varchar(4))
            + CAST(DATEPART(month,transcriptCreationDateUTC) AS varchar(4))
            + CAST(DATEPART(day,transcriptCreationDateUTC) AS varchar(4))
        AS int)

这至少可以说是丑陋的,并且还有一个问题就是它在月和日的字段中删除了前导零,所以例如2017-03-28 20:44:35.000转换为2017328而不是20170328就像我想的那样等。

必须有一个更好的方法,任何帮助赞赏!

2 个答案:

答案 0 :(得分:1)

咦?只需转换为date

select cast(transcriptCreationDateUTC as date)

如果你想把它作为一个字符串:

select format(transcriptCreationDateUTC, 'yyyyMMdd')

如果您使用的是2012版之前的SQL Server,则可以执行以下操作:

select convert(varchar(10), transcriptCreationDateUTC, 112)

如果你想将它们作为一个整数(鉴于你的查询返回一个字符串,这是不明显的),只需将它们转换为整数:

select cast(format(transcriptCreationDateUTC, 'yyyyMMdd') as int)

或者,使用此算法:

select (year(transcriptCreationDateUTC) * 10000 + 
        month(transcriptCreationDateUTC) * 100 + 
        day(transcriptCreationDateUTC)
       ) as yyyymmdd

答案 1 :(得分:1)

样式112的

CONVERT(格式为YYYYMMDD):

SELECT CONVERT(VARCHAR(8),transcriptCreationDateUTC,112)

如果您确实需要将结果作为INT,请包含CAST(... AS INT)

SELECT CAST(CONVERT(VARCHAR(8),transcriptCreationDateUTC,112) AS INT)