Sql 将14(十四)位bigint数据类型转换为datetime数据类型
我有这样的情况:Sql 将14(十四)位bigint数据类型转换为datetime数据类型,sql,sql-server,tsql,sql-server-2016,Sql,Sql Server,Tsql,Sql Server 2016,我有这样的情况: 我有一个14位(不是13位)的bigint数据类型列。 这需要转换为datetime数据类型 例如,必须将20160418074908(bigint)转换为2016-04-18 07:49:08.000(datetime) 我已经通过了很多论坛,但都没有用 有什么建议吗?您需要将它们转换为日期和时间分隔的字符串值,并使用format()函数将bigint时间值格式化为字符串 select cast(cast(cast(left(cast(<date>
我有一个14位(不是13位)的bigint数据类型列。
这需要转换为datetime数据类型 例如,必须将
20160418074908
(bigint)转换为2016-04-18 07:49:08.000
(datetime)
我已经通过了很多论坛,但都没有用
有什么建议吗?您需要将它们转换为日期和时间分隔的字符串值,并使用format()
函数将bigint时间值格式化为字符串
select
cast(cast(cast(left(cast(<date> as varchar), 8) as date) as varchar) + ' ' +
format(cast(right(cast(<date> as varchar), 6) as int),
'##:##:##') as datetime) datetimes
from table
您需要将它们转换为日期和时间分开的字符串值,并使用format()
函数将bigint时间值格式化为字符串
select
cast(cast(cast(left(cast(<date> as varchar), 8) as date) as varchar) + ' ' +
format(cast(right(cast(<date> as varchar), 6) as int),
'##:##:##') as datetime) datetimes
from table
一种方法是转换到
char(14)
,然后使用left
获取日期部分,使用right
获取时间部分。日期部分可以按原样转换为datetime,因为它是yyyyMMdd
,但时间部分必须添加:
,放在第5和第3位-这就是东西的作用:
DECLARE @D as bigint = 20160418074908
SELECT CAST(LEFT(CAST(@D as char(14)), 8) AS DATETIME) +
CAST(STUFF(STUFF(RIGHT(CAST(@D as char(14)), 6), 5, 0, ':'), 3, 0, ':') AS DATETIME)
结果:
2016-04-18 07:49:08
与格式方法相比,这种方法的优势在于速度。
格式
功能不可用
一种方法是转换到char(14)
,然后使用left
获取日期部分,使用right
获取时间部分。日期部分可以按原样转换为datetime,因为它是yyyyMMdd
,但时间部分必须添加:
,放在第5和第3位-这就是东西的作用:
DECLARE @D as bigint = 20160418074908
SELECT CAST(LEFT(CAST(@D as char(14)), 8) AS DATETIME) +
CAST(STUFF(STUFF(RIGHT(CAST(@D as char(14)), 6), 5, 0, ':'), 3, 0, ':') AS DATETIME)
结果:
2016-04-18 07:49:08
与格式方法相比,这种方法的优势在于速度。
格式
功能不可用
感谢您提供的帮助:
我在另一个论坛上发现了这个(有点类似于Zohar的):
声明@DateValue varchar(50)=2016041807908
挑选
将(datetime,stuff(stuff(@DateValue,9,0',,12,0',:',,15,0',:'))转换为ConvertedDate感谢您提供的帮助:
我在另一个论坛上发现了这个(有点类似于Zohar的):
声明@DateValue varchar(50)=2016041807908
挑选
转换(datetime,stuff(stuff(@DateValue,9,0',,12,0',:'),15,0',:'))为ConvertedDate这是一个转换为数字的字符串。除非将其视为字符串,否则其数字没有任何意义。最简单的方法是将其转换回字符串,然后使用ParseExact
对其进行解析。您还可以使用模运算来提取单个元素。顺便说一句,一个DateTime
对象占用相同的空间,8字节。我尝试了无数种方法将14位数字转换为字符串,然后再转换为DateTime;我一次又一次地遇到这个错误:“算术溢出错误,将表达式转换为数据类型datetime。”顺便说一句,T-SQL中的datetime2(0)
比bigint占用的空间要小,只有6个字节,而不是8个字节。这是一个转换为数字的字符串。除非将其视为字符串,否则其数字没有任何意义。最简单的方法是将其转换回字符串,然后使用ParseExact
对其进行解析。您还可以使用模运算来提取单个元素。顺便说一句,一个DateTime
对象占用相同的空间,8字节。我尝试了无数种方法将14位数字转换为字符串,然后再转换为DateTime;我一次又一次地遇到这个错误:“将表达式转换为数据类型datetime时出现算术溢出错误。”顺便说一句,T-SQL中的datetime2(0)
比bigint占用更少的空间-只需6个字节,而不是8个字节,将日期部分转换为datetime
,您就可以添加这些部分了。无需强制转换为date然后varchar然后添加Strings您可以将其缩短为选择强制转换(左(@date,8)为datetime)+强制转换(格式(右(@date,6)为int),'#:#:###为datetime)为datetime
<代码>左和右
隐式地将数字转换为字符串。或者使用@date%1000000
提取时间部分将日期部分转换为datetime
,您就可以添加这些部分了。无需强制转换为date然后varchar然后添加Strings您可以将其缩短为选择强制转换(左(@date,8)为datetime)+强制转换(格式(右(@date,6)为int),'#:#:###为datetime)为datetime
<代码>左和右
隐式地将数字转换为字符串。或者使用@date%1000000
提取时间部分