我有一个包含2列的表:Customer_ID,它是一个字符串,用于标识每个客户端和Time_id:一个包含14个字符的字符串,用于标识事务的时间戳。例如:
Customer_id; Time_id
12345; 20140703144504
我希望能够在小时datepart中使用datediff,但我似乎无法正确转换time_id。我使用以下查询:
update transation_table
set time_id= (
convert(timestamp, time_id)
)
它可以工作,但删除了小时datepart,这是我需要的。对于day datepart,我可以这样做,转换为datetime。我怎么能把表格留在桌子上?
编辑:我正在运行MS SQL Server 2014.
最好的问候
答案 0 :(得分:1)
使用下面的转换和字符串连接,您可以在结果值上使用DATEPART。
DECLARE @tmp TABLE(
Customer_id VARCHAR(50),
Time_id VARCHAR(50)
)
INSERT INTO @tmp
SELECT '12345','20140703144504'
select
*,CONVERT(DATETIME,
SUBSTRING(Time_id,5,2) + '/' +
SUBSTRING(Time_id,7,2) + '/' +
SUBSTRING(Time_id,1,4) + ' ' +
SUBSTRING(Time_id,9,2) + ':' +
SUBSTRING(Time_id,11,2) + ':' +
SUBSTRING(Time_id,13,2)
,101
)
from @tmp
答案 1 :(得分:0)
使用FORMAT获取supported format中的值的字符串表示形式(日期和时间样式表中的ODBC规范),然后使用TRY_CONVERT返回实际的日期时间值:
SELECT TRY_CONVERT(DATETIME,
FORMAT(CAST('20140703144504' AS BIGINT),
'####-##-## ##:##:##'),
120);
这需要SQL Server 2012 +。
如其他地方所述,数据应存储在单个datetime2列或配对的date和time列中。上述功能可用于帮助将现有数据转换为新列。