繁体   English   中英

如何在SQL Server2012中将datetime转换为int?

[英]How to convert datetime to int in sql server2012?

这是我的问题:这是一个名为HB06的表,“ WRTime”的数据类型为datatime。我想将所有WRTime都转换为int。 例如2012-11-09 10:52:38.000将转换为20121109105238

图片

谢谢!

你不能 对于int数据类型,该值太大。 但这确实适合bigint。

您可以做的是将其转换为具有所需格式的字符串,然后将其转换为bigint类型。 使用FORMAT函数使IMO更直接:

DECLARE @a datetime = '20120304 23:34:12'
SELECT @a
SELECT CAST(FORMAT(@a, 'yyyyMMddhhmmss') AS bigint)

另一种方法是使用CONVERT函数,它使用较少的CPU。 但是没有与该格式匹配的直接样式,因此您可以不使用任何东西而将REPLACE()各种“乱码”字符替换掉。 除非您处理大型数据集,否则我不会理会CONVERT()选项。

您可以尝试以下一种

select concat(convert(varchar,WRTime,112),datepart(HH,WRTime),
datepart(MINUTE,WRTime),datepart(SS,WRTime)) from HB06
select  
cast(replace(replace(replace(convert(varchar(19), WRTime, 121),':',''),'-',''),' ','') as bigint)
FROM HB06

在下面的转换函数中使用:

SELECT CONVERT(VARCHAR(100),WRTime,112)+REPLACE(CONVERT(VARCHAR(100),WRTime,108),':','')
FROM HB06

在SQL版本2012或更高版本中,您可以使用FORMAT函数获取年份和月份,然后将其强制转换为int。

在2012年之前的版本中,您可以使用convert函数进行格式化,然后转换为int格式。

declare @WRTime datetime
set @WRTime = '2012-11-09 10:52:38.000'

select cast(format(@WRTime,'yyyyMM') as int) --2012 or higher

或者您可以使用:

SELECT YEAR(@WRTime)*100 + MONTH(@WRTime);

2012-11-09 10:52:38.000将转换为20121109105238 ??

Int无法将其转换,因此请使用"BIGINT"

declare @WRTime datetime
set @WRTime = '2012-11-09 10:52:38.000'

select cast(format(@WRTime,'yyyyMMddHHmmssfff') as bigint) --2012 or higher

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM