我在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进行我的第一个查询?
答案 0 :(得分:0)
执行选择时,转换仅应用于符合条件的DataValue(即DataKey ='ImagePRopertyTagDateTime')
SQL Server不执行延迟评估,因此使用where子句中的Convert,将针对所有行计算它,即使DataValue不适合解析为日期。