2017-09-13 94 views
0

我需要以“YYYYMMDD”的形式去除部分日期(作为日期时间字段存储在我的数据库表中)。我希望输出是一个整数。将年,月和日期从日期时间字段中除去为int

例如日期时间2017年3月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,因为我愿意。

必须有更好的方式,任何帮助赞赏!

回答

1

CONVERT风格112(这是YYYYMMDD格式):

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

如果你真正需要的结果作为INT,包裹在一个CAST(... AS INT)

SELECT CAST(CONVERT(VARCHAR(8),transcriptCreationDateUTC,112) AS INT) 
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 
+0

作为整数,CAST(CONVERT(char(8),transcriptCreationDateUTC,112) AS int)。 –

+0

使用强制转换为日期没有得到所需的输出,例如2017-03-28 20:44:35.000转换为2017-03-28不是20170328.我需要输出为该形式的整数,而不是一个约会。 –

+0

谢谢丹,指甲! –