前提・実現したいこと
タイトル通りです。
発生している問題・エラーメッセージ
困っているのは、INSERT文を生成する時に、文字列であれば''をつけ、そうでなければ''をつけないという様にif文で条件分岐させたのですが、日付だけ文字列として認識されず''がつかずにINSERT文が生成されてしまうというものです。日付にも''をつけたいのですが、数値や文字列かどうか確かめるためのisNaNなどの関数を見つけられなかったのでどうしたらいいか詰まっています。
宜しくお願いいたします。
該当のソースコード
GAS
1function addInsert() { 2 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 3 var sheet1 = spreadsheet.getSheetByName("シート1"); 4 var lastColumn = sheet1.getLastColumn(); 5 var lastRow = sheet1.getLastRow(); 6 7 // INSERT文のカラムを入れるところまで書く 8 var sentence = 'INSERT INTO ' + sheet1.getRange(1,2).getValue() + '('; 9 // スプレッドシートの2行目にカラムが入っているのでそれを取り出す 10 for (var i = 1;i <= lastColumn;i++) { 11 if(i != lastColumn) { 12 sentence += sheet1.getRange(2,i).getValue() + ','; 13 } else { 14 sentence += sheet1.getRange(2,lastColumn).getValue() + ')'; 15 } 16 } 17 18 // VALUESのあとの文を追加する 19 sentence += ' VALUES'; 20 // 3行目からデータが記述されているのでそれらを行ごとに、最後の列まで取り出す 21 for (var i = 3;i <= lastRow;i++) { 22 for (var j = 1;j <= lastColumn;j++) { 23 if(sheet1.getRange(i,1).getValue() == '') break; 24 // 数値ではなかった場合にシングルクォーテーションで文字をくくるようにする 25 if (j == 1) { 26 sentence += '('; 27 } 28 29 // 最後のカラムではない場合 30 if (j != lastColumn) { 31 if (!isNaN(sheet1.getRange(i,j).getValue())) { 32 sentence += sheet1.getRange(i,j).getValue() + ','; 33 } else { 34 sentence += "'" + sheet1.getRange(i,j).getValue() + "',"; 35 } 36 //最後のカラムかつ最後の行、つまり最後のセルである場合。 )で閉じる必要がある 37 } else if (j == lastColumn && i == lastRow) { 38 if (!isNaN(sheet1.getRange(i,j).getValue())) { 39 sentence += sheet1.getRange(i,j).getValue() + ')'; 40 } else { 41 sentence += "'" + sheet1.getRange(i,j).getValue() + "')"; 42 } 43 // 最後のカラムである場合 ),で閉じてピリオドを入れる必要がある 44 } else if (j == lastColumn) { 45 if (!isNaN(sheet1.getRange(i,j).getValue())) { 46 sentence += sheet1.getRange(i,j).getValue() + '),'; 47 } else { 48 sentence += "'" + sheet1.getRange(i,j).getValue() + "'),"; 49 } 50 } 51 } 52 } 53} 54
以下が実際に生成されたSQL文です
SQL
1INSERT INTO facility(id,name,type_id,capacity,insert_date,update_date,user_id) VALUES(1,'会議室001',1,816,Sat Jan 01 2000 00:00:00 GMT+0900 (日本標準時),Tue Jan 01 2002 00:00:00 GMT+0900 (日本標準時),'A0001'),(2,'会議室002',1,506,Sun Jan 02 2000 00:00:00 GMT+0900 (日本標準時),Wed Jan 02 2002 00:00:00 GMT+0900 (日本標準時),'A0002'),(3,'会議室003',1,450,Mon Jan 03 2000 00:00:00 GMT+0900 (日本標準時),Thu Jan 03 2002 00:00:00 GMT+0900 (日本標準時),'A0003')
スプレッドシートはこんな感じです。
テーブル名 facility
id name type_id capacity insert_date update_date user_id
1 会議室001 1 816 2000/1/1 0:00 2002/1/1 0:00 A0001
2 会議室002 1 506 2000/1/2 0:00 2002/1/2 0:00 A0002
3 会議室003 1 450 2000/1/3 0:00 2002/1/3 0:00 A0003
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/21 01:09
2020/07/21 02:16
2020/07/21 02:23 編集