1.(1)の方法だと、渡す値に’-‘を含むと値を正しく渡せない
(1)配列をJOINした文字列を”{” +…+ “}”で括ってIN句に渡す方法
(2)配列データの数だけ?をSQLのIN句に埋め込んで、値を配列で渡す方法
2.2種類の方法
(1)配列をJOINした文字列を”{” +…+ “}”で括ってIN句に渡す方法
“{‘”+strings.Join(user_ids , “‘,'”)+”‘}”
SQL = ` SELECT user_id, email_address AS username FROM user_authentication WHERE user_id NOT IN(?) `; s :=bytes.NewBufferString(""); s.WriteString(SQL); rows, err = db.Query(s.String(), "{'"+strings.Join(user_ids , "','")+"'}");
(2)配列データの数だけ?をSQLのIN句に埋め込んで、値を配列で渡す方法
・uuidsはstringの配列
・repeat := strings.Repeat(“?,”, len(uuids)-1) +”?” で配列データの数だけ?を作成
・db.Queryの引数はtype []interface {}なので、rangeとappendで、stringの配列からtype変換する
repeat := strings.Repeat("?,", len(uuids)-1) +"?" var args []interface {}; for _, tag := range uuids { args = append(args, tag) } SQL := ` SELECT sub_id AS uuid FROM bills WHERE sub_id IN ( `+repeat+` ) `; s := bytes.NewBufferString(""); s.WriteString(SQL); rows, err := db.Query(s.String(),args... );