• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ODBC SQLサーバーでSQLを実行したい・・・)

ODBC SQLサーバーで前月の月初第一金曜日に当たる日付を出力するSQL

このQ&Aのポイント
  • ODBC SQLサーバーで前月の月初第一金曜日に当たる日付を出力するSQLについて質問します。現在のSQLは複雑でわかりにくいため、もっと簡単な方法があるか教えてください。
  • このSQLは先輩が作成したもので、日付を8桁で出力する必要があります。どのように改良するべきかアドバイスをいただけますか。
  • 質問内容は、ODBC SQLサーバーを使用して前月の月初第一金曜日に当たる日付を出力する方法についてです。SQLが複雑で理解しにくいため、もっとシンプルな方法があるか教えていただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

サンプルのSQL文がいけてるかどうかのコメントは差し控えます。 SELECT CONVERT(varchar, CASE WHEN DATEPART(dw,DATEADD(d,DAY(DATEADD(m,-1,GETDATE()))*-1,DATEADD(m,-1,GETDATE())))>=6 THEN DATEADD(d,13-DATEPART(dw,DATEADD(d,DAY(DATEADD(m,-1,GETDATE()))*-1,DATEADD(m,-1,GETDATE()))), DATEADD(d,DAY(DATEADD(m,-1,GETDATE()))*-1,DATEADD(m,-1,GETDATE()))) ELSE DATEADD(d,6-DATEPART(dw,DATEADD(d,DAY(DATEADD(m,-1,GETDATE()))*-1,DATEADD(m,-1,GETDATE()))), DATEADD(d,DAY(DATEADD(m,-1,GETDATE()))*-1,DATEADD(m,-1,GETDATE()))) END,112) 一発で出したいニーズはあるのでしょうが、同じことを何度も書くことになるので、以下はご参考までに。 やっているのは同じことです(前々月末日を求めて、それより後の最初の金曜日を算出) DECLARE @NOW datetime DECLARE @PREVEOM datetime DECLARE @DP int SET @NOW=GETDATE() SET @PREVEOM=DATEADD(d,DAY(DATEADD(m,-1,@NOW))*-1,DATEADD(m,-1,@NOW)) SET @DP=DATEPART(dw,@PREVEOM) SELECT CONVERT(varchar, DATEADD(d,6-@DP+CASE WHEN @DP>=6 THEN 7 ELSE 0 END,@PREVEOM),112)

mariko0512
質問者

お礼

いけていないSQLは上記のいけているSQLに変更をしましたw 先輩とソースを読んで大変参考になりました。 ありがとうございます。

関連するQ&A

専門家に質問してみよう