我需要帮助来使用Go从表中获取记录。
我的问题是我正在编写MySQL查询并添加另一个where子句,即HPhone编号,这里HPhone编号插入数据库,格式如999-999-9999
。我以9999999999
格式传递了这个HPhone编号。与正确的数据库字段值不匹配。我使用SUBSTRING
在数字之间添加连字符,但它没有得到记录但是当我像没有999-999-9999
的SUBSTRING
那样传递它返回记录。
在这里,我演示了我如何使用它。
strQry = `SELECT * from table WHERE Depot = ?`
if HPhone != "" {
strQry += ` AND HPhone = ?`
}
queryArgs := []interface{}{RouteAvailability.Depot}
if HPhone != "" {
queryArgs = append(queryArgs, "SUBSTRING("+HPhone+",1,3)"+"-"+"SUBSTRING("+HPhone+",4,3)"+"-"+"SUBSTRING("+HPhone+",7,4)")
}
帮助将不胜感激。提前致谢。
而不是SUBSTRING
你可以像这样使用REPLACE
:
queryArgs := []interface{}{RouteAvailability.Depot}
if HPhone != "" {
strQry += ` AND REPLACE(HPhone, '-', '') = ?`
queryArgs = append(queryArgs, HPhone)
}
如果可能的话,我会建议您对数据进行规范化,即确定特定数据类型的规范格式,并且每当您的程序收到包含该数据类型的输入时,您将其格式化为规范形式,这样您就可以避免必须处理SUBSTRING
,或REPLACE
,或多种不一致的格式等。
这将不起作用,因为您正在使用预准备语句,并且当HPhone
不为空时您正在构建的参数将以转义形式使用 - 因此在执行查询时,它不会将HPhone
值与某些计算结果进行比较substring,但是包含SUBSTRING(9999...
的字符串