tSQL - 将nvarchar(8)转换为仅限时间

时间:2017-11-19 01:16:10

标签: sql sql-server ssms

我正在使用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;

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

我所拥有的是 - nvarchar(8),我希望它是sql time data type,类似 hh:mm:ss [如果可能的话 - 不会尾随nnnnnn - 纳秒组件]

1 个答案:

答案 0 :(得分: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;