我有一个包含两个时间列的表。我正在尝试比较这些时间并在它们匹配时生成特定输出。
到目前为止,我无法对这些值执行相等比较,它们都会导致以下错误:
Msg 241,Level 16,State 1,Line 1 从字符串转换日期和/或时间时转换失败。
以下是我的表格示例以及我尝试执行相等比较的不同方法。
CREATE TABLE [dbo].[Time_Table](
[RowID] [int] NOT NULL,
[OpenTime] [time](7) NOT NULL,
[CloseTime] [time](7) NOT NULL)
GO
insert into Time_Table values (1,'01:00:00', '01:00:00')
CASE WHEN OpenTime = CloseTime THEN 'MATCH' ELSE OpenTime END
CASE WHEN CAST(OpenTime AS DATETIME) = CAST(CloseTime AS DATETIME) THEN 'MATCH' ELSE OpenTime END
CASE WHEN DATEDIFF(MINUTE,CAST(OpenTime AS DATETIME),CAST(CloseTime AS DATETIME)) = 0 THEN 'MATCH' ELSE OpenTime END
所有这些陈述都会导致我上面粘贴的错误。 SQL Server本身是否将此数据类型存储为字符数据?正如您在我的DDL中看到的,我使用的是“时间”数据类型,而不是字符数据类型。
我想知道这是否是由于此服务器上的排序规则设置? (Latin1_General_BIN)
对于使用“时间”数据类型执行时间比较/相等检查的任何帮助或建议将不胜感激。
答案 0 :(得分:3)
您必须先将时间值转换为varchar。
在所有案例陈述中使用Cast(OpenTime as varchar(8))
CASE WHEN OpenTime = CloseTime THEN 'MATCH' ELSE Cast(OpenTime as varchar(8)) END
原因是在案例构造中,
select case Conditional expression THEN whatever this else that end
this
和that
必须相同datatype
。