【问题标题】:Creating, storing and using TIME values创建、存储和使用 TIME 值
【发布时间】: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(我猜不是)。

REFERENCE

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

【问题讨论】:

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


    【解决方案1】:

    好吧,尝试使用:

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

    代替

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

    一分钟内没有99秒!

    【讨论】:

    • 天哪! ...看不到森林穿过树木! DECLARE @Time TIME = '23:59:59.9999999' 工作!谢谢你让我直截了当!
    猜你喜欢
    • 2023-02-03
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 2013-02-21
    • 2013-08-29
    • 1970-01-01
    相关资源
    最近更新 更多