【问题标题】:tSQL - convert nvarchar(8) to time onlytSQL - 仅将 nvarchar(8) 转换为时间
【发布时间】:2017-11-19 13:26:02
【问题描述】:

我正在使用 Microsoft SQL Server Management Studio 来操作公共交通系统数据库。 我在数据库中有一个名为“dbo.tblStop_times”的表,其中两列的数据类型应为 time。目前,它们都是 nvarchar 并且它们的数据以这样的模式存储 - "07:39:00"(不带引号) 我对日期列也有同样的问题,但几个小时前在 stackoverflow 上找到了解决方案。

以下适用于将 nvarchar 列转换为日期列。

ALTER TABLE tblCalendar ALTER COLUMN [start_date] DATE NOT NULL;

我不确定我想要的是否可以实现,因为上面提到的转换效果很好,我认为它可能是可能的。

我的 atm 是 - nvarchar(8),我想要的是 sql time data type,类似于 hh:mm:ss [如果可能 - 没有尾随 nnnnnn - 纳秒组件]

【问题讨论】:

    标签: sql sql-server ssms


    【解决方案1】:

    你应该可以做到:

    ALTER TABLE tblStop_times ALTER COLUMN start_time TIME NOT NULL;
    

    Here 是一名rextester。

    编辑:

    如果您没有有效的时间值,那么您就有问题了。您应该首先查找值:

    select col
    from tblStop_times
    where try_convert(time, col) is null;
    

    这将显示无法转换的值。如果你愿意,你可以NULL 他们出去,这样alter 就可以了:

    update tblStop_times
        set col = NULL
        where try_convert(time, col) is null;
    

    【讨论】:

    • 我尝试了这种方法,但它失败并出现错误 - “从字符串转换日期和/或时间时转换失败。语句已终止。”
    • 如果需要,我可以发布更多详细信息/屏幕截图。
    • 我相信,try_convert 可从 MSSQL SERVER 2012 获得。
    • 当我在下面运行时:从 tblStop_times 中选择到达时间,其中 try_convert(时间,到达时间)为空; ...我有很多记录的值超过 24:00:00(即 24:52:00、24:09:00 甚至 25:09:00)...我从来不知道我有这样的值存储在表中,顺便说一句,这个表是基于 GTFS 的,我没有检查每个记录集,因为它有 70620 条记录。我现在可能会寻找为什么它存在于数据库中,列名为arrival_time,并且具有这些意外值。
    • 将此解决方案标记为正确的解决方案,因为它确实适用于正确/预期的记录。
    猜你喜欢
    • 2021-01-17
    • 2015-09-23
    • 2014-11-19
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多