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... );