1

SQLServer2005での文字列からdatetime変換に問題があります。

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)て同じ結果が得られました。

selectで変換できるのに、どこで変換できないのですか?そして、whereステートメントが機能するようにconvertを使用して最初のクエリを作成するにはどうすればよいですか?

4

1 に答える 1

0

選択を行うと、変換は基準を満たすDataValueにのみ適用されます(つまり、DataKey ='ImagePRopertyTagDateTime')

SQL Serverは遅延評価を実行しないため、where句にConvertを使用すると、DataValueが日付としての解析に適していない場合でも、すべての行に対して評価されます。

于 2012-05-23T11:58:35.047 に答える