使用Go中的查询Args获取记录

问题描述 投票:-2回答:2

我需要帮助来使用Go从表中获取记录。

我的问题是我正在编写MySQL查询并添加另一个where子句,即HPhone编号,这里HPhone编号插入数据库,格式如999-999-9999。我以9999999999格式传递了这个HPhone编号。与正确的数据库字段值不匹配。我使用SUBSTRING在数字之间添加连字符,但它没有得到记录但是当我像没有999-999-9999SUBSTRING那样传递它返回记录。

在这里,我演示了我如何使用它。

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)")
}

帮助将不胜感激。提前致谢。

mysql go
2个回答
2
投票

而不是SUBSTRING你可以像这样使用REPLACE

queryArgs := []interface{}{RouteAvailability.Depot}

if HPhone != "" {
    strQry += ` AND REPLACE(HPhone, '-', '') = ?`
    queryArgs = append(queryArgs, HPhone)
}

如果可能的话,我会建议您对数据进行规范化,即确定特定数据类型的规范格式,并且每当您的程序收到包含该数据类型的输入时,您将其格式化为规范形式,这样您就可以避免必须处理SUBSTRING,或REPLACE,或多种不一致的格式等。


0
投票

这将不起作用,因为您正在使用预准备语句,并且当HPhone不为空时您正在构建的参数将以转义形式使用 - 因此在执行查询时,它不会将HPhone值与某些计算结果进行比较substring,但是包含SUBSTRING(9999...的字符串

© www.soinside.com 2019 - 2024. All rights reserved.