Мне нужна помощь для извлечения записей из таблицы с помощью Go.
Моя проблема в том, что я пишу MySQL-запрос и добавляю другое предложение where ie HPhone number. Здесь номер HPhone вставлен в базу данных в формате 999-999-9999
И я передал этот номер HPhone в формате 9999999999
. который не соответствует правильному значению поля базы данных. И я использовал 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...
SUBSTRING
в своем запросе - вы можете просто создать его просто на ходу