2017-03-19 4 views
0

ほとんどのプログラミング言語でforループに似たselect文を実行するには、(My)SQLに効果的な方法があるかどうかを知る必要があります。最も簡単な例は、1から100までの値を持つ列を作成することです。私は、(最も興味深いと思ったのは、各桁を目標の長さに十字で結合したものでした。最終的に、私は単一の列 'n'と1から100万の値を持つデータベースにNという名前のテーブルを作成しました(数学記号のように)。ここでSQLの "for"を選択するとよりスマートな方法ですか?

は、私はこれを必要に応じてきた例です:

select ..... 
cross join 
(
select n,str_to_date(period_add(date_format(CURDATE(),'%Y%m'),n),'%Y%m') as 'date' from n where n<period_diff(201912,date_format(CURDATE(),'%Y%m')) 
) 

これは、12月2019年に(2017年3月であることを起こる)CURDATEからすべての年/月の組み合わせの列を返しますが、nが使用され見ることができます月を追加して「forループの終了条件」を計算するための「変数」として使用します。これはうまくいく。それで問題は、これを行うよりエレガントな方法があるということです。

+0

あなたの方法は上質です。 –

答えて

1

あなたの方法は問題ありません。私は何をするに傾斜されることがあります。

select date_add(date_add(curdate(), interval 1 - day(curdate()) day), interval n.n month) 
from n 
where date_add(date_add(curdate(), interval 1 - day(curdate()) day), interval n.n month) <= '2019-12-01' 

私は日付計算を行うのではなく、文字列に前後に行くことを好みます。

の式:

date_add(curdate(), interval 1 - day(curdate()) day) 

は、月の最初の日を取得するという方法です。

関連する問題