比較を行うときには、フォーマットをdatetime
にしてください。 SQL Server 2008には有用な新しいデータ型time
がありますが、SQL Server 2005では代わりにdatetime
を使用する必要があります。
convert(..., 114)
を使用して、datetime
変数から時刻部分のみを取得していると思います。このコードを使用して日付部分を削除しても、datetime
という変数を使用することができます。
declare @dt datetime
set @dt = '2001-01-01T10:01:02.000'
select dateadd(d, datediff(d, @dt, 0), @dt)
結果:
1900-01-01 10:01:02.000
あなたが使用するデータ型を指定.value
を使用してXMLからデータを抽出します。 XMLにtime部分のみがあり、datetime
と指定すると、日付 '1900-01-01'の時刻が取得されます。したがって、このようにdatetime
を使用して比較を行うことができます。
declare @T table (ID int, XMLCol xml)
insert into @T
select 1, '<t1>10:01:01.123</t1><t2>10:01:02.123</t2>' union all
select 2, '<t1>11:01:01.123</t1><t2>11:01:02.123</t2>'
declare @dt datetime
set @dt = '2001-01-01T10:01:02.000'
select T.ID
from @T as T
where dateadd(d, datediff(d, @dt, 0), @dt) between
T.XMLCol.value('t1[1]', 'datetime') and
T.XMLCol.value('t2[1]', 'datetime')
結果:
ID
1
あなたは正しいですが、文字列の順序は正確に同じ結果を与え、そして私はそれを使用しています理由です。 –
@SQL:代わりに別の方法に変換することで、文字列の書式設定について心配する必要はありません。これは一般的にはより良いアプローチです - データを、それより離れてではなく、最も論理的なデータ形式に変換してください。 –