ホームページ >データベース >mysql チュートリアル >SQL Server の日時フィールドから時刻部分を効率的に削除するにはどうすればよいですか?

SQL Server の日時フィールドから時刻部分を効率的に削除するにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-22 10:57:14746ブラウズ

How to Efficiently Remove the Time Portion from a SQL Server Datetime Field?

SQL Server datetime フィールドからの日付抽出の最適化

SQL Server datetime フィールドから日付部分だけを抽出するのは一般的なタスクです。 ここでは、効率性を考慮して 2 つの一般的なアプローチを比較します。

方法 A:

<code class="language-sql">SELECT DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0)</code>

方法 B:

<code class="language-sql">SELECT CAST(CONVERT(CHAR(11), GETDATE(), 113) AS DATETIME)</code>

パフォーマンスベンチマーク

どちらの方法も一般に高速ですが、方法 A は、特に大規模なデータセットで常に優れたパフォーマンスを示します。 100 万行のデータセットでテストしたところ、方法 A を使用すると CPU 消費量が大幅に減少し、その効率性が強調されました。

追加要素

速度以外にも、他の考慮事項がメソッドの選択に影響します。

  • ロケールと日付の形式: メソッド B が CONVERT から CHAR に依存すると、ロケール固有の日付形式に関する潜在的な問題が発生します。
  • データ型の処理: メソッド B は内部で FLOAT を利用するため、ストレージに影響する可能性があります。
  • 拡張性: メソッド A では、計算を拡張するための柔軟性が向上します (例: 月の最初の日または次の日を見つける)。

SQL Server 2008 以降

SQL Server 2008 以降のバージョンの場合、CAST 関数は合理化された代替手段を提供します。

<code class="language-sql">CAST(GETDATE() AS DATE)</code>

このアプローチは効率的であり、DATE データ型を直接返します。

インデックスの最適化

重要なことは、CAST 句内で関数または WHERE 操作を適用すると、インデックスの使用が妨げられ、クエリのパフォーマンスに影響を与える可能性があります。 最適なクエリ速度を維持するには、可能な限りそのような行為を避けてください。

おすすめ

パフォーマンスと適応性を考慮して、SQL Server の datetime フィールドから時間コンポーネントを削除する推奨方法は次のとおりです。

<code class="language-sql">SELECT DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0)</code>

以上がSQL Server の日時フィールドから時刻部分を効率的に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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