在sql server中将字符串转换为smalldatetime数据类型时转换失败(不包括静态值)

时间:2015-12-14 10:30:25

标签: sql sql-server tsql

我有table存储启动时间和结束时间。

我有

  

将字符串转换为smalldatetime时转换失败   数据类型。

使用table选择以下查询时出错。

select CAST(substring(CONVERT(varchar,convert(smalldatetime,o.StartTime),114), 1,2) as int) 
from TimeTable O

在分析中,我发现Few Records的Starttime为'9:30 PM'导致错误。 (其他记录以'09:30 PM'作为开始时间)。我已排除'9:30 PM'记录并成功执行查询。

问题在这里,

如果我在select语句中明确指定了值,如下所示

SELECT CAST(substring(CONVERT(varchar,convert('9:30 PM',o.StartTime),114), 1,2) as int) 

我没有收到任何错误。

但是,当我从table中选择时,我得到了错误。任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

您实际需要的输出是什么?

如果您希望将“9:30 PM”或“09:30 PM”等值转换为时间格式,则可以继续使用下面的

SELECT CAST(CONVERT(VARCHAR(8), '9:30 PM', 108)AS TIME)
SELECT CAST(CONVERT(VARCHAR(8), '09:30 PM', 108)AS TIME)

否则,如果您希望将其存储在datetime或smalldatetime

那么这对你有用

SELECT CAST(CONVERT(VARCHAR(8), '9:30 PM', 108)AS DATETIME)
SELECT CAST(CONVERT(VARCHAR(8), '09:30 PM', 108)AS DATETIME)