MySQL で、PostgreSQL の generate_series関数と同じことをする。

MySQLPostgreSQL の generate_series 関数と同じことをしようとすると、

SET @num:= 0;
SELECT @num:=@num+1 FROM `information_schema`.COLUMNS LIMIT 4;


でもこれでは SET 文と2つの文になってしまって mybatis での実行では都合が悪い。

SELECT a.VC
FROM (
    SELECT 0 AS VC FROM DUAL WHERE (@num:=1-1) * 0
    UNION ALL
    SELECT @num:=@num+1 FROM information_schema.COLUMNS LIMIT 4
)  a
;

これで、PostgreSQL

SELECT GENERATE_SERIES(1, 4)

と同じことができる。

これを'0'埋めの文字列にしたければ、

SELECT LPAD(a.VC, 4, '0') AS UCD
FROM (
    SELECT 0 AS VC FROM DUAL WHERE (@num:=1-1) * 0
    UNION ALL
    SELECT @num:=@num+1 FROM information_schema.COLUMNS LIMIT 4
)  a
;

先日投稿の PostgreSQL の generate_series - Oboe吹きプログラマの黙示録
で書いたように、、
日付 2022-12-15 から 2022-12-25 までDATE型で結果を出力する

SELECT date_add('2020-12-15', interval a.VC - 1  day) AS V_DATE
FROM (
    SELECT 0 AS VC FROM DUAL WHERE (@num:=1-1) * 0
    UNION ALL
    SELECT @num:=@num+1 FROM information_schema.COLUMNS LIMIT 11
)  a
;