C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: SQLServerでリストのデータを作る方法について


(過去ログ 163 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■94287 / inTopicNo.1)  SQLServerでリストのデータを作る方法について
  
□投稿者/ 紅子 (3回)-(2020/03/31(Tue) 08:57:08)

分類:[データベース全般] 

2020/03/31(Tue) 09:09:45 編集(投稿者)

SQLServer の SQLで

DECLARE @SDATE DATETIME = '2020-01-01';
DECLARE @EDATE DATETIME = '2020-12-31';

を使って以下のような@SDATE〜@EDATE の年月の
テーブルを作りたいのですがどうすればよいのでしょうか?
(@SDATE,@EDATEは任意不定です)

≡SQL≡

WITH
YMLIST AS (
:
--ここに年月リストを作るSQL
:
)


SELECT *
FROM YMLIST

≡結果≡

DATE
202001
202002
:
202012


引用返信 編集キー/
■94288 / inTopicNo.2)  Re[1]: SQLServerでリストのデータを作る方法について
□投稿者/ 魔界の仮面弁士 (2653回)-(2020/03/31(Tue) 10:05:05)
No94287 (紅子 さん) に返信
> 以下のような@SDATE〜@EDATE の年月の
> テーブルを作りたいのですがどうすればよいのでしょうか?

WITH YMLIST AS ( SELECT YMD
= @SDATE UNION ALL SELECT DATEADD(M, 1, YMLIST.YMD)
FROM YMLIST WHERE DATEADD(M, 1, YMLIST.YMD)
<= @EDATE) SELECT CONVERT(CHAR(6),
YMD, 112) AS YMD FROM YMLIST
引用返信 編集キー/
■94289 / inTopicNo.3)  Re[2]: SQLServerでリストのデータを作る方法について
□投稿者/ 紅子 (4回)-(2020/03/31(Tue) 10:20:25)
No94288 (魔界の仮面弁士 さん) に返信

ありがとうございます。
いろいろサイト見て回って自己解決しました。
ごめんなさい。

若干(CONVERT と FORMAT)の違いはありますが、
同じ処理に行き着いてました。

WITH
CTE AS (
  SELECT @SDATE AS DATE
  UNION  ALL
  SELECT DATEADD(mm, 1, CTE.DATE) AS DATE
  FROM  CTE
  WHERE  DATEADD(mm, 1, CTE.DATE) <= @EDATE
  )

SELECT FORMAT(DATE, 'yyyyMM') AS DATE
FROM  CTE;

>SELECT YMD = @SDATE
SELECT文で代入文を使用すると AS と同じになるんですね



解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -