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

在sql server中将字符串转换为smalldatetime数据类型时失败(不包括静态值),sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个表存储开始时间和结束时间 我得到 将字符串转换为smalldatetime时转换失败 数据类型 使用该表选择下面的查询时出错 select CAST(substring(CONVERT(varchar,convert(smalldatetime,o.StartTime),114), 1,2) as int) from TimeTable O 在分析中,我发现很少有Starttime为'9:30 PM'的记录会导致错误。(其他记录的开始时间为'09:30 PM')。我已排除“9:30

我有一个
存储开始时间和结束时间

我得到

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

使用该
选择下面的查询时出错

select CAST(substring(CONVERT(varchar,convert(smalldatetime,o.StartTime),114), 1,2) as int) 
from TimeTable O
在分析中,我发现很少有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) 
我没有得到任何错误


但是,当我从
表中选择时,我得到了错误。有人能帮上忙吗?

您真正想要的输出是什么

如果您希望将“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)

您实际想要的输出是什么

如果您希望将“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)