如何在表中的SQL中存储小时datepart

时间:2014-07-03 13:49:13

标签: sql sql-server

我有一个包含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.

最好的问候

2 个答案:

答案 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列或配对的datetime列中。上述功能可用于帮助将现有数据转换为新列。