2022-02-11 09:29:50
在Go语言操作Vertica数据库时,若SQL语句中的正则表达式包含问号“?”,需将其替换为“??”以避免被误认为参数占位符。
原因分析sql: expected N arguments, got 0
Incorrect number of parameters for prepared statement
Vertica数据库支持通过双问号“??”表示字面意义的单个问号“?”。修改SQL语句时,需将正则表达式中的所有“?”替换为“??”,确保驱动正确解析。
示例对比构建SQL时替换问号:在拼接或格式化SQL字符串时,对正则表达式部分中的“?”进行全局替换。
originalRegex := "abc?def"escapedRegex := strings.ReplaceAll(originalRegex, "?", "??") // 替换为"abc??def"sql := fmt.Sprintf("SELECT * FROM table WHERE column LIKE '%s'", escapedRegex)执行查询:使用db.Query()执行替换后的SQL,无需传递额外参数。
rows, err := db.Query(sql)if err != nil { log.Fatal(err)}defer rows.Close()通过上述方法,可有效解决Go语言操作Vertica时正则表达式问号被误解析的问题,确保SQL语句按预期执行。