ホームページ >データベース >mysql チュートリアル >SQL Server で日付を考慮せずに時間値を効率的に比較するにはどうすればよいですか?

SQL Server で日付を考慮せずに時間値を効率的に比較するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-22 03:33:10518ブラウズ

How Can I Efficiently Compare Time Values in SQL Server Without Considering the Date?

SQL Server での時間値の比較

データベース クエリでの時間値の比較は、特に、日付または時刻の形式。目的が時間部分のみを比較することである場合、正確な結果を得るには特定のテクニックが必要です。

問題ステートメント

範囲内の時間値を比較しようとしています。 SQL クエリの datetime フィールドを使用しているため、アプローチが正しいかどうかわかりません。具体的には、日付コンポーネントに関係なく、08:00:00 が 07:30:00 より小さいか大きいかを判断します。

非効率的な解決策

最初のアプローチでは、convert() 関数を使用して startHour 値を datetime に変換し、それらを比較します。この方法では望ましい結果が得られる可能性がありますが、行ごとに文字列変換が必要となるため非効率になる可能性があります。

効率的な時間比較

効率的な時間比較を行うには、次のようにします。 SQL Server の日時値の固有の浮動小数点表現を利用することをお勧めします。ここでは、時刻値を比較するためのステップバイステップのガイドを示します。

  1. cast() 関数を使用して日時値を浮動小数点数に変換します。
  2. 整数部分 ( date) を、floor() 関数を使用して浮動小数点値から取得します。これにより、時間コンポーネントのみが残ります。
  3. 2 つの日時値の時間コンポーネントを減算して、差を計算します。

サンプル クエリ

このアプローチを説明するために次のクエリを考えてみましょう:

declare @first datetime
set @first = '2009-04-30 19:47:16.123'
declare @second datetime
set @second = '2009-04-10 19:47:16.123'

select (cast(@first as float) - floor(cast(@first as float))) -
       (cast(@second as float) - floor(cast(@second as float)))
       as Difference

このクエリは次のように計算します。 2 つの日時値の時間部分の差。これらの時間コンポーネントを直接比較できます。

以上がSQL Server で日付を考慮せずに時間値を効率的に比較するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。