windows7のmysqlで今日の日付から、今月の日付をテーブルに格納した
い。例えば、テーブルのtimecardで、
日付 出社時刻 退社時刻
と言うのが有って、事前に日付のフィールドを予め作りたい時にどの様
にして日付を作るのかと言う事です。
日付に関しては、curdate()で今日の日付が例えば、2016-02-10と出ま
す。この値を使って日数は、day(last_day(curdate()))で29と出ます。
160201から、160229迄を日付としてinsert intoをしたいのですが。繰
り返しの数は、day(last_day(curdate()))で得られます。
問題は、160201から160229をどの様にしてデータを作って追加するのか
と言う事ですが。その辺の処理が良く分かりません。
済みませんが、sqlの例示をお願いします。
宜しくお願いします。
No.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 …
No.2
- 回答日時:
>多分にこれは一発では作れないので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;
有難う御座います。動きました。
ここで、一つ質問が有ります。
INSERT IGNORE INTO MYTABLE VALUES (@D);で、
テーブルに書き込みますが、この場合はテーブルには一つしかフィール
ドが無いので(と)でフィールドの指定は要らないのでしょうか。
また、これと関連して
CREATE TABLE IF NOT EXISTS MYTABLE(`d` DATE NOT NULL UNIQUE);
上記の`d`のバッククォートの意味が分かりません。今迄は普通に何も
付けないでフィールドの名前を指定していたのですが。この場合のバッ
ククォートを付ける意味は何なんでしょうか。
以上の二点が分かりません。
済みません。また回答をお願いします。
No.1
- 回答日時:
MySQL自体が持つプログラム機能を使えばできないことはないですが
結構めんどくさい
むしろPHPなど外部プログラムで流し込む方が数倍楽ですが
どうしてもMySQL側で処理したいですか?
phpは分かりませんが、perlは分かりますのでperlでも作れない事は無
いとは思いますが。私は、mysqlに付いては、素人ですので。後々の事
を考えたらmysqlの文法を覚える意味では有意義なのではと思ったりも
した物ですから。
mysqlで組んだらどう言う構成になるのかが興味は有ります。若し、宜
しければ後学の意味で教えて貰えないでしょうか。
多分にこれは一発では作れないのでprocedureで作るとは思いますが。
宜しくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- Visual Basic(VBA) VBAで列を削除 3 2023/02/01 11:00
- SQL Server DBのテーブルの設計ができず困っています。 2 2023/06/29 16:43
- Oracle sql(oracle)で質問です。 テーブルAのカラム名、日付(yyyymmdd)の値を テーブルB 2 2023/01/06 10:31
- Visual Basic(VBA) 【再投稿】VBAのシフト表でバグが出て困っています 3 2022/09/24 08:29
- Visual Basic(VBA) 今日の日付が過ぎたらその行を削除したい 1 2023/04/01 20:06
- Excel(エクセル) Excel関数式で該当月日のみ表示し、それ以外の月日を空白にしたい。 1 2022/07/17 11:59
- Oracle sqlで質問です。 Aテーブルの情報をBテーブルに更新かけたいです。 やりたいことは、Bテーブルの受 1 2023/05/17 11:17
- Excel(エクセル) Excelについて 3 2023/07/12 17:47
- 英語 "this day"が当日か今日を表すのかの使い分け方等について 5 2023/08/08 14:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数のテーブルから値を合計出...
-
MySQLのdatetime型に0月0日を格納
-
<SQL>重複しているデータの場合...
-
最新の日付と2番目の日付のデー...
-
日付検索で0001-01-01 00:00:00...
-
mysqlに格納されている日付のデ...
-
DISTINCTROWについてです。
-
SQLローダーCSV取込で、囲み文...
-
select文の実行結果に空白行を...
-
group byの並び順を変えるだけ...
-
テーブルの最後(最新)のレコー...
-
Oracleで「文字が無効です」の...
-
割合(パーセント)を求めるには?
-
SQL*Loader Append
-
配列に指定した値が含まれてい...
-
アクセスのレポートでレコード...
-
並べ替えについて
-
【PL/SQL】FROM区に変数を使う方法
-
PL/SQL内の共通関数の引数にフ...
-
月末日のみソートしたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<SQL>重複しているデータの場合...
-
複数のテーブルから値を合計出...
-
最新の日付と2番目の日付のデー...
-
日付検索で0001-01-01 00:00:00...
-
SQLで、同じ値が何回連続す...
-
SQL 重複しないJoinの仕方を教...
-
SQLです教えてくださいお願いし...
-
DISTINCTROWについてです。
-
MySQLのdatetime型に0月0日を格納
-
mysqlでunixtimeによる日付範囲...
-
NULLは表示順最下位
-
日付・・・insertとselect
-
項目1の日付順に並べ項目2の...
-
先期末日の日付を求めるSQL
-
下記の問合せを行うクエリを、 ...
-
【ExcelVBA】入力された日付か...
-
SQL文の作成について
-
MySQLで特定のグループの上位3...
-
レコードのコピー
-
mysqlのif文かcase文で複数条件...
おすすめ情報
create tableで、バッククォートを付けるのはこの場合は予約語とかぶるので必要と言う事でしょうか。また、フィールドが一つの場合のinsert intoはフィールドの指定は要らないのでしょうね。
と思いますが。どうでしょうか。
declareと言うのは、procedureの中で使われるローカル変数と言う事でしょうか。
またbeginとendは複数の行をprocedureの中で記述をする時には必要と言う事でしょうか。