创建,存储和使用TIME值

时间:2013-03-01 19:15:14

标签: tsql sql-server-2008-r2 sql-update

我不是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(猜测不是)。

REFERENCE

time (Transact-SQL)
SQL Server 2008 R2
Range      00:00:00.0000000 through 23:59:59.9999999

1 个答案:

答案 0 :(得分:1)

好吧,试试使用:

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

而不是

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

一分钟内没有99秒这样的事情!