1

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

如果Convert(datetime, x)在这样的 where 语句中使用:

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)结果相同。

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

4

1 回答 1

0

当您进行选择时,转换仅适用于符合您条件的 DataValue(即 DataKey = 'ImagePRpertyTagDateTime')

SQL Server 不执行惰性求值,因此使用 where 子句中的 Convert,它将针对所有行求值,即使 DataValue 不适合解析为日期。

于 2012-05-23T11:58:35.047 回答