最も近い1日に丸める 、広く使用されている3つのアプローチがあります。最初のものはdatediff
を使用します 0
からの日数を検索する 日付時刻。 0
日時は1900年1月1日に対応します。開始日に日差を追加すると、1日に丸められます。
select dateadd(d, 0, datediff(d, 0, getdate()))
2番目の方法はテキストベースです。テキストの説明をvarchar(10)
で切り捨てます。 、日付部分のみを残す:
select convert(varchar(10),getdate(),111)
3番目の方法では、datetime
は実際には1900年以降の日数を表す浮動小数点です。したがって、たとえばfloor
を使用して、整数に丸めることによって 、1日の始まりを取得します:
select cast(floor(cast(getdate() as float)) as datetime)
2番目の質問に答えるために、週の始まり トリッキーです。 1つの方法は、曜日を引くことです。
select dateadd(dd, 1 - datepart(dw, getdate()), getdate())
これも時間の部分を返すので、最初の日付に到達するには、それをタイムストリッピング方法の1つと組み合わせる必要があります。たとえば、@start_of_day
読みやすさの変数として:
declare @start_of_day datetime
set @start_of_day = cast(floor(cast(getdate() as float)) as datetime)
select dateadd(dd, 1 - datepart(dw, @start_of_day), @start_of_day)
年、月、時、分の始まり 引き続き「1900年以降の違い」アプローチで機能します:
select dateadd(yy, datediff(yy, 0, getdate()), 0)
select dateadd(m, datediff(m, 0, getdate()), 0)
select dateadd(hh, datediff(hh, 0, getdate()), 0)
select dateadd(mi, datediff(mi, 0, getdate()), 0)
秒で四捨五入 0
からの秒数のため、別のアプローチが必要です オーバーフローを与えます。その回避策の1つは、1900年ではなく、1日の始まりを基準日として使用することです。
declare @start_of_day datetime
set @start_of_day = cast(floor(cast(getdate() as float)) as datetime)
select dateadd(s, datediff(s, @start_of_day, getdate()), @start_of_day)
5分で丸める 、分丸め方法を調整します。たとえば、/5*5
を使用して、分の差の商を取ります。 :
select dateadd(mi, datediff(mi,0,getdate())/5*5, 0)
これは、4分の1時間半でも機能します。