我对 SQL 并不陌生,但最近创建了一个表,其中包含一个定义为TIME
. 出于某种原因,我无法让该字段在 12 AM ( 23:59:99.999
) 以下取值。我的简化 TSQL 如下。
DECLARE @Time TIME = '23:59:99.99999'
UPDATE tblProjectSLA
SET colSLATime = @Time
WHERE SLAID IN ( 22, 24)
我收到以下错误:
消息 241,级别 16,状态 1,第 1 行
从字符串转换日期和/或时间时转换失败。
我能够将时间值设置为尽可能低的时间“分辨率”,并成功更新了该字段。
DECLARE @Time DATETIME = '23:59'
这是我查询时出现在 SQL mgr 中的结果:
colSLATime
23:59:00.0000000
我还尝试将字符串值转换为 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
如果有人能指出我对使用 TIME 数据类型的来龙去脉的简单讨论。或者我应该废弃并在运行时只使用 VARCHAR 字段和 CAST (猜不是)。
time (Transact-SQL)
SQL Server 2008 R2
Range 00:00:00.0000000 through 23:59:59.9999999