4

SQLでdatetime値の時間部分のみを比較する方法.

以下の方法で試してみましたが、

 DECLARE @t1  smalldatetime
 SET @t1=CAST('1900-01-01 '+CONVERT(varchar(8),@saledate,108) As smalldatetime) 
 --------------------------------------------------------------------------------

 SELECT Model FROM  Sales WHERE @t1 between WorkStart  and WorkEnd And Ctrl=@key

「WorkStart」と「WorkEnd」は DateTime フィールドで、日付部分には常に「1900-01-01」が含まれます。

パラメータ @saledate は日時です。@saledate、workstart、および workend の日付部分を考慮せずに時間部分のみを比較するにはどうすればよいですか。

テーブルはすでに WorkStart および WorkEnd with DateTime フィールドを作成しており、現在使用されているため、フィールドのデータ型を変更できません。

4

1 に答える 1

5

SQL Server 2008 以降を使用している場合は、TIME データ型にキャストして時間部分を比較できます。

SELECT Model 
FROM Sales 
WHERE 
  CAST(@saledate AS time) BETWEEN CAST(WorkStart AS time) AND CAST(WorkEnd AS time) 
  AND Ctrl = @key

これを頻繁に行う場合は、日時を DATETIME ではなく TIME としてデータベース列に格納すると、パフォーマンスが向上します。

于 2013-08-01T09:58:30.157 に答える