Получить записи с запросом Args in Go

0

Мне нужна помощь для извлечения записей из таблицы с помощью 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)")
}

Помощь была бы оценена. Заранее спасибо.

  • 1
    Вы должны проверить, содержит ли сгенерированный запрос то, что вы ожидаете, или нет, это поможет вам найти ошибку. Возможно, вы не хотите выполнять SUBSTRING в своем запросе - вы можете просто создать его просто на ходу
  • 0
    Спасибо за ответ, Нико, я думаю, вы предлагаете мне сначала преобразовать этот телефон в форматированный телефон HP, например 999-999-9999, а затем перейти к нему в интерфейсе queryArgs. я прав ?
Показать ещё 1 комментарий
Теги:
go

2 ответа

2
Лучший ответ

Вместо SUBSTRING вы можете использовать REPLACE так:

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

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

Если возможно, я предлагаю вам нормализовать ваши данные, то есть выбрать канонический формат для определенного типа данных, и каждый раз, когда ваша программа получает некоторый ввод, который содержит этот тип данных, который вы отформатируете в свою каноническую форму, таким образом вы можете избежать необходимости иметь дело с SUBSTRING или REPLACE, или несколько несогласованных форматов и т.д.

  • 0
    Спасибо @mkopriva, вы спасли меня. это работает хорошо.
0

Это не будет работать, поскольку вы используете подготовленные операторы, а аргумент, который вы строите, когда HPhone не пуст, будет использоваться в экранированной форме - поэтому при выполнении запроса он не будет сравнивать значения HPhone с вычисленным результатом некоторых substring, но с строкой, содержащей SUBSTRING(9999...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню