こんにちは、システムのテストを行うため、テストデータをExcelに入力し、CONCATENATEでSQLのInsert文を生成してPostgreSQLのDBに入力する作業をしています。
たとえば、以下のようにテスト用データをExcelに入力します。
|corp_name|description|create_id|create_at|
|:--|:--:|--:|
|A会社|説明あり|1|2018-10-01
|B会社|||NULL
corp_name, descriptionは文字列(text)、create_idは数値(integer),create_atはデータ型(datetime)です。B会社のCreate_atは、NULLを出力させてみたかったので入れてみました。
このテーブルのデータをSQL文に作るため、テーブルの右セールに以下のような数式を作りました。
「1行目(F1セルに入力したとします)」
INSERT INTO test_corps (corp_name,description,create_id,create_at) VALUES (
「2行目以上(Excelの自動完成を利用して複数のデータを作ります。)」
=CONCATENATE($F$1,"‘",A2,"’,‘",A3,"’,",A4,",‘",A5,"’);")
=CONCATENATE($F$1,"‘",B2,"’,‘",B3,"’,",B4,",‘",B5,"’);")
.....(データを追加していく)
すると、結果的にこのようなSQL文ができあがりました。
SQL
1INSERT INTO test_corps (corp_name,description,create_id,create_at) VALUES (‘A会社’,‘説明有り’,1,‘2018-10-01’); 2INSERT INTO test_corps (corp_name,description,create_id,create_at) VALUES (‘B会社’,‘’,,‘NULL’);
このSQL文をDBで実行すると、1番目のSQL文は成功的に処理されますが、2番目は怒られます。調べたところ、データが無い場合はNULLを入れないとダメらしく、Excelのセルが空でデータがない場合はNULLが入るようにしたいです。
しかし、数値は数字そのまま、文字列の値はシングルクォーテーションで囲まないと怒られるし、セルにNULLを入力してみたら、文字列として入力されてしまう(nullではなく、文字列の"null"が値として入ってしまう)のでかなり困っています。
要すると、
Excelにデータを入力してSQL文を作る際に、
1.セルが空白の場合はSQLのValue値にNullを入れたい
2.値が文字列の場合はシングルクォーテーション、数値の場合はそのまま出力したい
です。
上記の例をあげ、欲しいSQL文は、こんな感じです。
SQL
1INSERT INTO test_corps (corp_name,description,create_id,create_at) VALUES (‘A会社’,‘説明有り’,1,‘2018-10-01’); 2INSERT INTO test_corps (corp_name,description,create_id,create_at) VALUES (‘B会社’,null,null,null); 3
どのようにCONCATENATE文を修正すれば、もしくはExcelの関数を使えばいいでしょうか。
教えてください。よろしくお願いします。
回答5件
あなたの回答
tips
プレビュー