【发布时间】:2013-02-16 09:25:39
【问题描述】:
我对 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
【问题讨论】:
标签: tsql sql-server-2008-r2 sql-update