Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
tSQL-仅将nvarchar(8)转换为时间_Sql_Sql Server_Ssms - Fatal编程技术网

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

tSQL-仅将nvarchar(8)转换为时间,sql,sql-server,ssms,Sql,Sql Server,Ssms,我正在使用Microsoft SQL Server Management Studio操作公共交通系统数据库。 我在数据库中有一个名为“dbo.tblStop_times”的表,其中两列的数据类型应为time。目前,它们都是nvarchar,并且它们的数据存储模式如下-“07:39:00”(不带引号) 我对日期列也有同样的问题,但几个小时前在stackoverflow上找到了解决方案 下面可以很好地将nvarchar列转换为date列 ALTER TABLE tblCalendar ALTER

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

下面可以很好地将nvarchar列转换为date列

ALTER TABLE tblCalendar ALTER COLUMN [start_date] DATE NOT NULL;
我不确定我想要的东西是否可以实现,因为上面提到的转换工作得很好,我认为这是可能的


我使用的atm是--
nvarchar(8)
,我希望它是
sql时间数据类型
,类似于hh:mm:ss[如果可能的话-不带尾随nnnnnn-纳秒组件]

您应该能够:

ALTER TABLE tblStop_times ALTER COLUMN start_time TIME NOT NULL;
他是一名测试员

编辑:

如果没有有效的时间值,则会出现问题。您应该首先查找以下值:

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;

我尝试了这种方法,但失败了,错误是“从字符串转换日期和/或时间时转换失败。语句已终止。”如果需要,我可以发布更多详细信息/屏幕截图。我相信,MSSQL SERVER 2012提供了try_convert。当我运行以下命令时:从tblStop_times中选择到达时间,其中try_convert(time,arrival_time)为空;…我得到了大量值超过24:00:00(即24:52:00、24:09:00甚至25:09:00)的记录…我从来不知道我在表中存储了这样的值,顺便说一句,这个表是基于GTFS的,我没有检查每个记录集,因为它有70620条记录。我现在可能会查找它在数据库中的原因,列名为arrival_time,并且有这些意外值。将此解决方案标记为正确的解决方案,因为它在r正确/预期记录。