[解決済み] 今年の元日と最終日を知るには?
2022-07-12 22:25:17
質問
SQL Server 2000 を使用して、現在の年の最初の日付と最後の日付を取得するにはどうすればよいですか。
期待される出力
01/01/2012
そして
31/12/2012
どのように解決するのですか?
SELECT
DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) AS StartOfYear,
DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1) AS EndOfYear
上記のクエリは、12月31日午前0時というdatetimeの値を与えます。これは、1年の最後の瞬間から約24時間短いものです。もし、12月31日に発生するかもしれない時間を含めたいのであれば、次の年の初めと比較するように
<
と比較します。または、現在の年の最後の数ミリ秒と比較することもできますが、DATETIME 以外のもの(DATETIME2 など)を使用している場合は、これでもまだギャップが残っています。
SELECT
DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) AS StartOfYear,
DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1) AS LastDayOfYear,
DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, 0) AS FirstOfNextYear,
DATEADD(ms, -3, DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, 0)) AS LastTimeOfYear
その他の期間
この方法には二つの良い点があります:パフォーマンスが良いこと、そして
yy
(=year)を別の文字列で置き換えることで、他の期間にも簡単に変更できます。
yy, yyyy year
qq, q quarter
mm, m month
wk, ww week
(週数に注意: 開始日はサーバの設定に依存します)
技術的な詳細
これは、1900年からの年数を計算することによって動作します。
DATEDIFF(yy, 0, GETDATE())
で1900年からの年数を計算し、それをゼロ = 1900年1月1日の日付に足すことで動作します。これは、任意の日付に対して動作するよう
GETDATE()
の部分を置き換えることで、任意の日付、または任意の年に対して動作するように変更することができる。
DATEDIFF(...)
関数を "年 - 1900." に置き換えることで、任意の年を指定することができます。
SELECT
DATEADD(yy, DATEDIFF(yy, 0, '20150301'), 0) AS StartOfYearForMarch2015,
DATEADD(yy, 2015 - 1900, 0) AS StartOfYearFor2015
関連
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] SQL Server テーブルにカラムが存在するかどうかを確認する方法は?
-
[解決済み] SQL Server の DateTime データ型から日付だけを返す方法
-
[解決済み] カラムの変更:NULLをNOT NULLに変更する
-
[解決済み] SQL Server にテーブルが存在するかどうかを確認する
-
[解決済み] 最初の行への結合方法
-
[解決済み】「INNER JOIN」と「OUTER JOIN」の違いは何ですか?
-
[解決済み】SQL Serverで既存のテーブルにデフォルト値を持つカラムを追加する
-
[解決済み] SQL ServerでINNER JOINを使用して削除するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[エラー処理] [MySQL] [Err] 1241 - オペランドは 1 つのカラムを含む必要があります。
-
解決策:java.sql.SQLException: ユーザー ''@'localhost'' (パスワード: YES を使用) のアクセスが拒否されました。
-
[解決済み] SQL ServerでJOINを使用してUPDATE文を実行するにはどうすればよいですか?
-
[解決済み] 各グループの最後のレコードを取得する - MySQL
-
[解決済み] SQL Serverにおける関数とストアドプロシージャの比較
-
[解決済み] SQL Server における DateTime2 と DateTime の比較
-
[解決済み] SQL Server の VARCHAR/NVARCHAR 文字列に改行を挿入する方法
-
[解決済み] フラットテーブルをツリーにパースする最も効率的/エレガントな方法は何ですか?
-
[解決済み] 複数の列に対してSELECT DISTINCTする方法(またはできる方法)は?
-
[解決済み] SQL Serverで、ある日付より大きいすべての日付を照会するにはどうすればよいですか?