Ответ 1
Вам нужно поместить шаблон like
в одинарные кавычки:
SELECT p.id, p.name, p.description, p.price, p.image, p.rate
FROM products AS p
WHERE LOWER(p.name) LIKE '%' || $1 || '%'
ORDER BY p.rate DESC;
Я работаю с Go и PostgreSQL (pq-драйвер), у меня есть следующий запрос
SELECT p.id, p.name, p.description, p.price, p.image, p.rate
FROM products AS p
WHERE LOWER(p.name) LIKE %$1% ORDER BY p.rate DESC
Если я выполняю этот запрос непосредственно в PostgreSQL, он работает, но в Голанге говорится:
pq: syntax error at or near "%"
Как я могу это исправить? Я пробовал с "\%", но не работал. спасибо.
вот полный исходный код
func FindByName(name *string) ([]*Product, error) {
db, err := db.StablishConnection()
if err != nil {
log.Fatal(err)
panic(err)
}
defer db.Close()
query := `SELECT p.id, p.name, p.description, p.price, p.image, p.rate
FROM products AS p
WHERE LOWER(p.name) LIKE %$1% ORDER BY p.rate DESC`
product_rows, err := db.Query(query, name)
if err != nil {
return nil, err
}
if product_rows == nil {
return nil, errors.New("No Products Named " + *name)
}
products := []*Product{}
for product_rows.Next() {
product := new(Product)
err = product_rows.Scan(&product.Id,
&product.Name,
&product.Description,
&product.Price,
&product.Image,
&product.Rate)
if err != nil {
panic(err)
}
products = append(products, product)
}
return products, nil
}
Вам нужно поместить шаблон like
в одинарные кавычки:
SELECT p.id, p.name, p.description, p.price, p.image, p.rate
FROM products AS p
WHERE LOWER(p.name) LIKE '%' || $1 || '%'
ORDER BY p.rate DESC;
Не ставьте qoutes, когда вы готовите свой запрос. Просто укажите значение с помощью qoutes и знака%. Это решит проблему. пробовал и проверял.
Решение:
запрос: = SELECT p.id, p.name, p.description, p.price, p.image, p.rate
FROM products AS p
WHERE LOWER(p.name) LIKE $1 ORDER BY p.rate DESC
product_rows, err := db.Query(query, "'%" + name + "%'")
Я получил свое разрешение от этой темы
Согласно этой проблеме ваш запрос не должен содержать знак "%", но параметр "name" должен быть заключен в кавычки "%"
query := 'SELECT p.id, p.name, p.description, p.price, p.image, p.rate
FROM products AS p
WHERE LOWER(p.name) LIKE $1 ORDER BY p.rate DESC'
product_rows, err := db.Query(query, fmt.Sprintf("%%%s%%", name))