Использование подчеркивания в Postgresql LIKE - PullRequest
0 голосов
/ 22 марта 2019

Я пытаюсь использовать подчеркивания в postgresql LIKE для поиска определенного шаблона данных, но, похоже, он не работает.

Клиент версии 9.2.21, а сервер версии 9.4.12.

Например,

select * 
from table1 
where f1 like '___'

ничего не возвращает, даже если в таблице явно есть совпадение - т.е. есть данные со значением, которое совпадает - например, f1 = '123'.

Мне интересно, существует ли системный конфиг / параметр, который влияет на это поведение?

Или это можно объяснить другим способом?

1 Ответ

6 голосов
/ 22 марта 2019

Значения, хранящиеся в столбцах, определенных как char(9), будут дополнены пробелами до определенной длины. Поэтому, когда вы сохраняете '123' в этом столбце, он на самом деле хранит '123 '

Вам нужно обрезать эти пробелы:

where trim(f1) = '___'

Но вы должны полностью избегать типа char. Он не дает никаких преимуществ перед varchar, но имеет несколько недостатков (вы только что нашли один)

...