我不是SQL的新手,但最近创建了一个包含定义为TIME
的列的表。出于某种原因,我不能让这个字段在上午12点(23:59:99.999
)之前取值。我的简化TSQL如下。
DECLARE @Time TIME = '23:59:99.99999'
UPDATE tblProjectSLA
SET colSLATime = @Time
WHERE SLAID IN ( 22, 24)
我收到以下错误:
Msg 241,Level 16,State 1,Line 1
从字符串转换日期和/或时间时转换失败。
我能够将时间值设置为可能的最低时间'分辨率',并且成功更新了该字段。
DECLARE @Time DATETIME = '23:59'
以下是我查询时出现在SQL mgr中的结果:
colSLATime
23:59:00.0000000
我也试过将字符串值CAST到TIME ......同样的错误:
DECLARE @Time TIME = CAST('23:59:99.99999' AS TIME)
我觉得奇怪的是,表的定义精度为16,比例为7,我不应该使用接近表中保存值的东西吗?
以下是列colSLATime的定义方式...(使用sp_help命令并转换为更容易阅读)
Column_name colSLATime
Type time
Computed no
Length 5
Prec 16
Scale 7
Nullable yes
TrimTrailingBlanks (n/a)
FixedLenNullInSource (n/a)
Collation NULL
如果有人能指点我对ins& amp;使用TIME数据类型。或者我应该废弃并在运行时使用VARCHAR字段和CAST(猜测不是)。
time (Transact-SQL)
SQL Server 2008 R2
Range 00:00:00.0000000 through 23:59:59.9999999
答案 0 :(得分:1)
好吧,试试使用:
23:59:59.99999
------^ this digit is pretty important!
而不是
23:59:99.99999
------^
一分钟内没有99秒这样的事情!