SQL Server时间数据类型错误

时间:2015-01-26 16:57:25

标签: sql sql-server sql-server-2008

我有一个包含两个时间列的表。我正在尝试比较这些时间并在它们匹配时生成特定输出。

到目前为止,我无法对这些值执行相等比较,它们都会导致以下错误:

  

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)

对于使用“时间”数据类型执行时间比较/相等检查的任何帮助或建议将不胜感激。

1 个答案:

答案 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

thisthat必须相同datatype