3

テーブルのフィールドに基づいて、1 時間の最後の 1 秒を取得するクエリを使用する必要があります。

動作しているように見えるこのクエリを実行しました (SQL Server 2008)

SELECT DATEADD(S, -1, DATEADD(hh, 1, dateadd(分, datediff(分,0,GETDATE()) / 60 * 60, 0)))

これはこれを行うための最良の方法ですか、それともよりクリーンな (より読みやすい) 高速な方法がありますか。これは文字列処理が多いテーブルで実行されるため、速度を考慮しており、可能な限り最適化しようとしています。

編集:私はもともとこの質問のテキストと件名を「現在の時間の最後の分」と読むように投稿しましたが、これは「最後の1秒」を読むことを意図していました。その日、私の心は明らかにシャットダウンしました。私の間違いをお詫びします

4

3 に答える 3

5

これはどう:

  select convert(char(13),GETDATE(),121)+':59:59.000'


SQL Fiddle のデモ

于 2012-10-12T11:49:40.527 に答える
4

クエリを実行すると、ではなく最後の1秒が表示されます。 これが別の方法です。

select dateadd(second, -1, dateadd(hour, 1+datediff(hour, 0, getdate()), 0))

ギリギリを取得するには、

select dateadd(minute, -1, dateadd(hour, 1+datediff(hour, 0, getdate()), 0))
于 2012-10-12T11:58:26.527 に答える
1

私は実際にはジョーとほぼ同じ考えを持っていましたが、どちらが速いかを見つけようとしていたので、実行しました:

SELECT DATEADD(S, -1, DATEADD(hh, 1, dateadd(minute, datediff(minute,0,GETDATE()) / 60 * 60, 0)))
GO 1000

その後:

select SUBSTRING( convert(varchar(20), GETDATE(),20),1,14)+'59:59'
GO 1000

最初のクエリは 44 秒で実行され、2 回目は 42 秒で実行されたため、大きな違いはありません。クエリを試してみると影響があるかもしれませんが、私が見る限り、ほぼ同じです

于 2012-10-12T12:03:26.857 に答える