質問: こんにちは、システムのテストを行うため、テストデータを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文ができあがりました。 ``` INSERT INTO test_corps (corp_name,description,create_id,create_at) VALUES (‘A会社’,‘説明有り’,1,‘2018-10-01’); INSERT 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文は、こんな感じです。 ``` INSERT INTO test_corps (corp_name,description,create_id,create_at) VALUES (‘A会社’,‘説明有り’,1,‘2018-10-01’); INSERT INTO test_corps (corp_name,description,create_id,create_at) VALUES (‘B会社’,null,null,null); ``` どのようにCONCATENATE文を修正すれば、もしくはExcelの関数を使えばいいでしょうか。 教えてください。よろしくお願いします。
回答: excelは、あくまでもデータの作成に専念して、そこからprn形式もしくは、CSV形式に変換した後、parlでそのデータを読み込み、sqlを生成するという手もあります。