Sql-Server
將儲存為 char YYYMMDDHHmmSS 格式的日期時間轉換為日期時間
我正在使用一個表,其中事件的日期和時間以 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
.