日時データの最適化: SQL Server の時刻コンポーネントの削除
課題:
datetime
フィールドを操作するには、多くの場合、時刻を除く日付部分を分離する必要があります。この記事では、この一般的な SQL Server タスクの最も効率的な方法を検討します。
推奨されるアプローチ:
さまざまな手法を比較した結果、最も効率的で柔軟なソリューションは次のとおりです。
<code class="language-sql">SELECT DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0)</code>
パフォーマンス分析:
この方法は、特に大規模なデータセットで優れたパフォーマンスを一貫して示します。 その固有の柔軟性は、他の日付関連の値の計算にも拡張されます (例: 月の最初の日の決定)。
代替方法と制限事項:
varchar
を使用して CONVERT(char(11), GETDATE(), 113)
に変換すると、場合によっては許容可能なパフォーマンスが得られますが、潜在的なリスクが伴います。 varchar
変換により、言語/日付形式の不一致が発生する可能性があります。 さらに、この方法には、DATEADD
/DATEDIFF
アプローチの適応性が欠けています。
SQL Server 2008 以降:
SQL Server 2008 以降のバージョンでは、date
への直接キャストという合理化された代替手段が提供されます。 例: CAST(GETDATE() AS DATE)
。これにより、プロセスが大幅に簡素化されます。
インデックス作成とパフォーマンスに関する考慮事項:
句内で CAST
関数または WHERE
演算を使用すると、インデックスの使用率に悪影響を及ぼす可能性があります。 最適なクエリ パフォーマンスを維持するには、慎重な計画が不可欠です。
datetime2
の処理:
同じ原則が datetime2
にも適用されます (SQL Server 2008 で導入され、SQL Server 2019 で強化されました)。 以下に例を示します:
<code class="language-sql">DECLARE @datetime2value datetime2 = '02180912 11:45'; -- Year 0218 for demonstration within datetime2 range DECLARE @datetime2epoch datetime2 = '19000101'; SELECT DATEADD(dd, DATEDIFF(dd, @datetime2epoch, @datetime2value), @datetime2epoch);</code>
以上がSQL Server の DateTime 値から時刻コンポーネントを効率的に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。