Перейти к сообщению postgresql LIKE

Я работаю с 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
}

Ответ 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;

Ответ 2

Не ставьте 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 + "%'")

Я получил свое разрешение от этой темы

Ответ 3

Согласно этой проблеме ваш запрос не должен содержать знак "%", но параметр "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))