将字符串转换为SQL Server中where语句的datetime

时间:2012-05-23 11:53:02

标签: sql-server-2005 datetime type-conversion

我在SQL Server 2005中转换为datetime字符串时遇到问题。

如果在where语句中使用Convert(datetime, x),请执行以下操作:

SELECT ThumbId
FROM [ImageBankSQL].[dbo].[MetaData]
WHERE (DataKey = 'ImagePropertyTagExifDTOrig'
       OR DataKey='ImagePropertyTagDateTime')
AND CONVERT(datetime, DataValue, 120) > CONVERT(datetime, '2011-09-23 00:00:00', 120)

我明白了:

  

从字符串转换日期时间

时转换失败

但是如果我选择转换后的datetime而不是在where语句中使用它们,那么一切都很好,我得到了转换日期:

SELECT ThumbId, Convert(datetime, DataValue, 120), Convert(datetime, '2011-09-23 00:00:00', 120)
FROM [ImageBankSQL].[dbo].[MetaData]
WHERE (DataKey = 'ImagePropertyTagExifDTOrig'
       OR DataKey = 'ImagePropertyTagDateTime')

在这两个示例中,我使用了Convert(datetime, DataValue, 120)Convert(datetime, DataValue)两个相同的结果。

为什么我可以在select中转换,但不能在哪里转换?如何在where语句中使用convert进行我的第一个查询?

1 个答案:

答案 0 :(得分:0)

执行选择时,转换仅应用于符合条件的DataValue(即DataKey ='ImagePRopertyTagDateTime')

SQL Server不执行延迟评估,因此使用where子句中的Convert,将针对所有行计算它,即使DataValue不适合解析为日期。