Pet*_*din 2 sql-server t-sql type-conversion datetime
我正在处理一个表,其中事件的日期和时间以 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)
Run Code Online (Sandbox Code Playgroud)
您还可以将其添加为计算列或使其成为视图的一部分,这样您就不必在每个查询中一遍又一遍地执行计算。
作为计算列:
ALTER TABLE dbo.whatever ADD dt
AS CONVERT(DATETIME, STUFF(STUFF(STUFF(col,9,0,' '),12,0,':'),15,0,':'), 120);
Run Code Online (Sandbox Code Playgroud)
由于计算是确定性的,它可以被持久化和/或索引。
使用视图:
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;
Run Code Online (Sandbox Code Playgroud)
那么你可以简单地说:
WHERE dt < DATEADD(MINUTE, -20, CURRENT_TIMESTAMP)
Run Code Online (Sandbox Code Playgroud)
尽管我必须同意其他人的看法 - 您需要修复模型。没有任何优势来,这个存储作为一个字符串,只是当他们进入非日期垃圾像你的用户没有得到烦人的错误信息whosawatsa
,甚至20120230000000
。
归档时间: |
|
查看次数: |
2419 次 |
最近记录: |