0

我对 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
4

1 回答 1

1

好吧,尝试使用:

23:59:59.99999
------^ this digit is pretty important!

代替

23:59:99.99999
------^

一分钟内没有99秒!

于 2013-03-01T19:19:22.537 回答