windows7のmysqlで今日の日付から、今月の日付をテーブルに格納した
い。例えば、テーブルのtimecardで、
日付 出社時刻 退社時刻

と言うのが有って、事前に日付のフィールドを予め作りたい時にどの様
にして日付を作るのかと言う事です。

日付に関しては、curdate()で今日の日付が例えば、2016-02-10と出ま
す。この値を使って日数は、day(last_day(curdate()))で29と出ます。

160201から、160229迄を日付としてinsert intoをしたいのですが。繰
り返しの数は、day(last_day(curdate()))で得られます。

問題は、160201から160229をどの様にしてデータを作って追加するのか
と言う事ですが。その辺の処理が良く分かりません。

済みませんが、sqlの例示をお願いします。
宜しくお願いします。

質問者からの補足コメント

  • どう思う?

    create tableで、バッククォートを付けるのはこの場合は予約語とかぶるので必要と言う事でしょうか。また、フィールドが一つの場合のinsert intoはフィールドの指定は要らないのでしょうね。

    と思いますが。どうでしょうか。

      補足日時:2016/02/10 14:25
  • どう思う?

    declareと言うのは、procedureの中で使われるローカル変数と言う事でしょうか。
    またbeginとendは複数の行をprocedureの中で記述をする時には必要と言う事でしょうか。

      補足日時:2016/02/10 14:30

A 回答 (3件)

>動きました。


それはよかった

>テーブルに書き込みますが、この場合はテーブルには一つしかフィール
>ドが無いので(と)でフィールドの指定は要らないのでしょうか。
VALUESで指定する引数の個数と、テーブルのカラム数が同じ場合は省略可能です
気持ち悪ければ
INSERT IGNORE INTO MYTABLE (`d`) VALUES (@D);
としてください

>この場合のバッククォートを付ける意味は何なんでしょうか。
よくある予約語対策です。
予約語と競合しない場合はバッククォートは不要です
テーブルの日付カラムにdateとかつける人もよく見受けられるので
カラムだけにでも付けといたほうが気休めにはなります。
本来ならデータベース名やテーブル名にもつけます。

>declareと言うのは、procedureの中で使われるローカル変数と言う事でしょうか。
今回はそうなりますね
DECLARE自体はその他のカーソルや条件・ハンドラの定義などにつかいます
https://dev.mysql.com/doc/refman/5.6/ja/declare. …

>またbeginとendは複数の行をprocedureの中で記述をする時には必要と言う事でしょうか。
複合ステートメントの構文です
https://dev.mysql.com/doc/refman/5.6/ja/begin-en …
    • good
    • 0
この回答へのお礼

ありがとう

有難う御座いました。
これで大方の疑問が解けたのですっきりしています。

親切な回答有難う御座いました。

お礼日時:2016/02/10 15:03

>多分にこれは一発では作れないのでprocedureで作るとは思いますが。


とりあえずある程度知識がある前提で以下サンプル

→準備、テーブルをつくっておく
CREATE TABLE IF NOT EXISTS MYTABLE(`d` DATE NOT NULL UNIQUE);

→プロシージャを作る
DROP PROCEDURE IF EXISTS MYPROCEDURE;
DELIMITER //
CREATE PROCEDURE MYPROCEDURE(IN D DATE)
BEGIN
DECLARE LAST_DAY DATE;
SET @D=DATE_FORMAT( D, '%Y-%m-01');
SET LAST_DAY=LAST_DAY( D );
WHILE @D <= LAST_DAY DO
INSERT IGNORE INTO MYTABLE VALUES (@D);
SET @D := @D + INTERVAL 1 DAY;
END WHILE;
END
//
DELIMITER ;

→今日のデータから実行
CALL MYPROCEDURE(CURDATE());

(参考)特定の日付から
CALL MYPROCEDURE('2016-03-15');

→確認
SELECT * FROM MYTABLE;
    • good
    • 0
この回答へのお礼

有難う御座います。動きました。
ここで、一つ質問が有ります。

INSERT IGNORE INTO MYTABLE VALUES (@D);で、
テーブルに書き込みますが、この場合はテーブルには一つしかフィール
ドが無いので(と)でフィールドの指定は要らないのでしょうか。

また、これと関連して
CREATE TABLE IF NOT EXISTS MYTABLE(`d` DATE NOT NULL UNIQUE);

上記の`d`のバッククォートの意味が分かりません。今迄は普通に何も
付けないでフィールドの名前を指定していたのですが。この場合のバッ
ククォートを付ける意味は何なんでしょうか。

以上の二点が分かりません。
済みません。また回答をお願いします。

お礼日時:2016/02/10 14:21

MySQL自体が持つプログラム機能を使えばできないことはないですが


結構めんどくさい
むしろPHPなど外部プログラムで流し込む方が数倍楽ですが
どうしてもMySQL側で処理したいですか?
    • good
    • 0
この回答へのお礼

phpは分かりませんが、perlは分かりますのでperlでも作れない事は無
いとは思いますが。私は、mysqlに付いては、素人ですので。後々の事
を考えたらmysqlの文法を覚える意味では有意義なのではと思ったりも
した物ですから。

mysqlで組んだらどう言う構成になるのかが興味は有ります。若し、宜
しければ後学の意味で教えて貰えないでしょうか。

多分にこれは一発では作れないのでprocedureで作るとは思いますが。
宜しくお願いします。

お礼日時:2016/02/10 13:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

今、見られている記事はコレ!

  • ポケモンGOにハマる子供たち 大人はどう接すればよいのか

    ポケモンGOが上陸直後から大ブームになっている。夏休みということもあり、町に出ればスマホを手にゲームに熱中する子供の姿も頻繁に見掛ける。親子で楽しく散歩しながらポケモンを手に入れる姿はほほえましくもある...

  • 不潔な彼をどうにかしたい!

    最近は男性用化粧品が普及して小綺麗な男子が増えているが、まだまだ身だしなみなどどうでもいい男子がいるようだ。「教えて!goo」 の中に「不潔で男らしくない彼氏と喧嘩し、別れようかとなやんでいます」という投...

  • ゲーム業界ダンナ観察日記:第77話「サンドス」

    ダンナ様のねむねむ。奥様のとぽすけ。ごく普通のふたりは、ごく普通の結婚をし、だらだらと夫婦生活を送っていました。でもただひとつ違っていたのは、ダンナ様はゲーム会社勤務だったのです。

  • 気持ちが疲れた……そんな時に出来る簡単リフレッシュ方法

    生きていると様々な負の感情に襲われる。イライラ、しょんぼり、がっかり、モヤモヤ、セカセカ……。そういった感情を放っておいて蓄積されていくと心が疲れていってしまう。そうなってしまった時、自分でちょっとした...

  • あおくび大根で歳時記:第36話「東京盆」

    わびさびの心を愛する、あおくび大根たちが四季折々を和にくらす日常を豆知識と共にまったりとお届けします。

おしトピ編集部からのゆる~い質問を出題中

お題をもっとみる


このカテゴリの人気Q&Aランキング

おすすめ情報

カテゴリ