Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在SQLServer2012中将datetime转换为int?_Sql Server_Datetime_Sql Server 2012 - Fatal编程技术网

Sql server 如何在SQLServer2012中将datetime转换为int?

Sql server 如何在SQLServer2012中将datetime转换为int?,sql-server,datetime,sql-server-2012,Sql Server,Datetime,Sql Server 2012,我的问题是: 这是一个名为HB06的表,“WRTime”的数据类型是datatime。我想将所有WRTime转换为int。例如2012-11-09 10:52:38.000将转换为20121109105238 谢谢大家! 使用以下转换功能: SELECT CONVERT(VARCHAR(100),WRTime,112)+REPLACE(CONVERT(VARCHAR(100),WRTime,108),':','') FROM HB06 使用以下转换功能: SELECT CONVERT(VAR

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


谢谢大家!

使用以下转换功能:

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

使用以下转换功能:

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

你可以试试下面的一个

select concat(convert(varchar,WRTime,112),datepart(HH,WRTime),
datepart(MINUTE,WRTime),datepart(SS,WRTime)) from HB06

你可以试试下面的一个

select concat(convert(varchar,WRTime,112),datepart(HH,WRTime),
datepart(MINUTE,WRTime),datepart(SS,WRTime)) from HB06

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

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

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

另一种方法是使用CONVERT函数,它使用更少的CPU。但是没有与该格式匹配的直接样式,所以您可以将()各种“垃圾”字符替换为零。除非您处理大型数据集,否则我不会使用CONVERT()选项。

您不能。该值对于int数据类型太大。但它确实适合一个bigint

select  
cast(replace(replace(replace(convert(varchar(19), WRTime, 121),':',''),'-',''),' ','') as bigint)
FROM HB06
您可以做的是将其转换为所需格式的字符串,然后将其转换为bigint类型。使用FORMAT函数更直接:

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

另一种方法是使用CONVERT函数,它使用更少的CPU。但是没有与该格式匹配的直接样式,所以您可以将()各种“垃圾”字符替换为零。除非处理大型数据集,否则我不会使用CONVERT()选项。

SQL 2012版或更高版本您可以使用该函数仅获取年份和月份,然后将其转换为int

select  
cast(replace(replace(replace(convert(varchar(19), WRTime, 121),':',''),'-',''),' ','') as bigint)
FROM HB06
在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”


SQL版本2012或更高版本您可以使用该函数仅获取年份和月份,然后将其转换为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”


我链接到的问题的可能重复显示了如何将日期转换为varchar。然后,如果需要,可以将varchar强制转换为int。如果要将其转换为整数,则必须为
bigint
not
int
,因为
int
s的长度最多只能为10位。但实际上,为什么要更改数据类型?为什么要这样做?我不确定您是否会节省空间,并且整数不适合进行简单的日期运算。我链接到的问题可能重复显示了如何将日期转换为varchar。然后,如果需要,可以将varchar强制转换为int。如果要将其转换为整数,则必须为
bigint
not
int
,因为
int
s的长度最多只能为10位。但实际上,为什么要更改数据类型?为什么要这样做?我不确定您是否会节省空间,而且整数不适合进行简单的日期运算。@HaohaoQi那么您应该将答案标记为已接受的答案,以便其他人看到它对您有效@那么你应该将答案标记为已接受的答案,以便其他人看到它对你有用!这会将小时更改为12小时格式,并删除毫秒。使用此命令:
CAST(格式(@a,'yyyymmddhhmmssff')作为bigint)
此命令将小时更改为12小时格式并删除毫秒。使用此:
CAST(格式(@a,'yyyymmddhhmmssff')作为bigint)