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

SQLServerで日時の時間部分を削除するための最良のアプローチ

    厳密には、メソッドa 最もリソースを消費しない:

    a) select DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
    

    手元に時間がかかりすぎる人によって、同じ合計期間で100万行のCPU負荷が少ないことが証明されています。SQLServerで日付と時刻から日付を取得する最も効率的な方法は?

    他の場所でも同様のテストがあり、同様の結果が得られました。

    私はDATEADD/DATEDIFFを好みます。理由は次のとおりです。

    • varcharは言語/日付形式の問題の影響を受けます
      例:CASE式が非決定的であるのはなぜですか?
    • floatは内部ストレージに依存しています
    • 「0」ベースを変更することで、月の初日、明日などを解決するように拡張されます

    編集、2011年10月

    SQL Server 2008以降の場合、dateにキャストできます つまり、CAST(getdate() AS date) 。または、dateを使用します データ型なのでtime 削除します。

    編集、2012年1月

    これがいかに柔軟であるかの実例:SQLサーバーでの丸められた時間または日付の数値で計算する必要がある

    編集、2012年5月

    これをWHERE句などで考えずに使用しないでください。列に関数またはCASTを追加すると、インデックスの使用が無効になります。ここで2番目を参照してください。一般的なSQLプログラミングの間違い

    現在、これには、現在までのCASTを正しく管理している後のSQL Serverオプティマイザーバージョンの例がありますが、一般的に それは悪い考えになります...

    2018年9月、datetime2の編集

    DECLARE @datetime2value datetime2 = '02180912 11:45' --this is deliberately within datetime2, year 0218
    DECLARE @datetime2epoch datetime2 = '19000101'
    
    select DATEADD(dd, DATEDIFF(dd, @datetime2epoch, @datetime2value), @datetime2epoch)
    


    1. Oracleのすべてのテーブル制約を無効にする

    2. ステップバイステップR12.2.6VirtualBoxPart-2へのEBSのインストール

    3. MariaDBの時間値から秒の部分を返す4つの関数

    4. Oracle REPLACE()関数は、キャリッジリターンとラインフィードを処理していません