Левая часть выражения LIKE должна соответствовать varchar? - PullRequest
0 голосов
/ 20 июня 2019

Я пишу запрос с фильтром на основе строки внутри поля.Однако, и я запускаю запрос, он показывает ошибку:

Левая часть выражения LIKE должна соответствовать varchar

Я хочу, чтобы fFilter был у всех, кто купилBMW на основе custom_field.

Это пример данных, которые находятся внутри настраиваемого поля:

{ "car_model;":"BMWZ4", "car_id":"0980291", "manufacture":"bmw" }

Код:

SELECT
    first_name,
    Last_name,
    country,
    custom_field
FROM 
    sales_table
WHERE 
    custom_field LIKE '%BMWZ4%' 

Ожидаемый результат

first_name: John   
last_name: Parker      
country: Germany   
custom_field: {"car_model;":"BMWZ4","car_id":"098222291","brand":"bmw"}

Ответы [ 2 ]

1 голос
/ 20 июня 2019

Это слишком долго для комментария.

Ваш столбец custom_field не является случайной строкой.Это определенно строка JSON.На самом деле, он может вообще не храниться в виде строки, используя двоичный формат JSONB.

Базы данных, поддерживающие JSON (в настоящее время это почти все основные), имеют функции JSON на заказ.Вы должны использовать эти функции для извлечения шаблонов и значений.Однако без знания базы данных никто не может дать вам конкретный ответ.

Часто обработка столбца JSON как его правильного типа приводит к более эффективным запросам, чем обработка его в виде строки.Некоторые базы данных даже разрешают индексы для столбцов JSON.

0 голосов
/ 20 июня 2019
SELECT
first_name,
Last_name,
country,
custom_field
FROM sales_table
WHERE cast( custom_field as varchar(max)) LIKE '%BMWZ4%' 
...