sql >> データベース >  >> RDS >> Sqlserver

SQLServerで日時と日付のみを比較する方法

    このようなことをしたくはありません:

    Select * from [User] U where convert(varchar(10),U.DateCreated, 120) = '2014-02-07'
    

    これはより良い方法です:

    Select * from [User] U 
    where U.DateCreated >= '2014-02-07' and U.DateCreated < dateadd(day,1,'2014-02-07')
    

    参照:「SARGable」という言葉は実際にはどういう意味ですか?

    編集+where句(または結合条件)のデータで関数を使用しないようにする2つの基本的な理由があります。

    1. ほとんどの場合、データの関数を使用してフィルタリングまたは結合すると、オプティマイザーがそのフィールドのインデックスにアクセスする機能が失われるため、クエリが遅くなります(またはより「コストがかかります」)
    2. もう1つは、関連するデータのすべての行に対して、少なくとも1つの計算が実行されていることです。 2014-02-07のような単一の基準と比較できるように、クエリに数百、数千、または数百万の計算が追加される可能性があります。 。代わりに、データに合わせて基準を変更する方がはるかに効率的です。

    「データに合わせて基準を修正する」は、「SARGABLEを使用する」という私の言い方です。 述語」

    また、どちらの間でも使用しないでください。

    日付と時刻の範囲のベストプラクティスは、BETWEENを避け、常に次のフォームを使用することです。

    WHERE col> ='20120101' AND col <'20120201'このフォームは、時間部分が適用可能かどうかに関係なく、すべてのタイプとすべての精度で機能します。

    http://sqlmag.com/t-sql/t-sql-best-practices-part-2(Itzik Ben-Gan)



    1. ゼロからデータベースモデルを作成する方法

    2. 変数としてのテーブル名

    3. SQL Server(T-SQL)でのTRANSLATE()関数のしくみ

    4. PostgreSQL12のデータベース管理と監視