Sql-Server

將儲存為 char YYYMMDDHHmmSS 格式的日期時間轉換為日期時間

  • January 10, 2018

我正在使用一個表,其中事件的日期和時間以 YYYMMDDHHmmSS 或“20120606122012”格式儲存為字元。我需要將此與目前時間戳進行比較,以查看事件發生後是否超過 20 分鐘,但這似乎比我預期的要困難。

是否有可能做到這一點,或者如果沒有:是否有不同的方法有效?

進行一些字元串操作以將字元串轉換為格式YYYYMMDD HH:mm:SS,然後您可以轉換/轉換為datetime.

像這樣的東西:

declare @S varchar(50)
set @S = '20120606122012'

select cast(left(@S, 8)+' '+substring(@S, 9, 2)+':'+substring(@S, 11, 2)+':'+substring(@S, 13, 2) as datetime)

您還可以將其添加為計算列或使其成為視圖的一部分,這樣您就不必在每個查詢中一遍又一遍地執行計算。

作為計算列:

ALTER TABLE dbo.whatever ADD dt
AS CONVERT(DATETIME, STUFF(STUFF(STUFF(col,9,0,' '),12,0,':'),15,0,':'), 120);

由於計算是確定性的,它可以被持久化和/或索引。

使用視圖:

CREATE VIEW dbo.view_whatever
AS
   SELECT /* other columns, */
     dt = CONVERT(DATETIME, STUFF(STUFF(STUFF(col,9,0,' '),12,0,':'),15,0,':'))
   FROM dbo.whatever;

然後你可以簡單地說:

WHERE dt < DATEADD(MINUTE, -20, CURRENT_TIMESTAMP) 

雖然我必須同意其他人的觀點 - 你需要修復模型。將其儲存為字元串沒有任何好處,除非您的使用者在輸入非日期垃圾(whosawatsa例如20120230000000.

引用自:https://dba.stackexchange.com/questions/18887