Like в PosgreSql

Всем привет! У меня есть столбец в таблице column_1, который содержит текстовые значения. Мне нужно отфильтровать так, чтобы значение не начиналось с цифры, а ещё не начиналось с буквы N. Я попробовала писать разными вариантами:

where column_1 not like 'N%' and column_1 not like '[1-9]%'
where column_1 not like 'N%' and column_1 !~ '[1-9]%'

Но не помогло( Я понимаю, что можно написать код, перебрав через and каждую цифру от 1 до 9. Но уверена, что можно коротким кодом все написать, только как это сделать? Помогите, пожалуйста, разобраться


Ответы (1 шт):

Автор решения: Мелкий

like - это не регулярное выражение. Чтобы через like проверить, является ли первый символ строки числом, вам нужно проверить каждую цифру отдельно:

not (column_1 like '1%'
 or column_1 like '2%'
 or column_1 like '3%'
 or ...)

для поиска совпадения по более гибкому паттерну, в postgresql существуют регулярные выражения (но где символ % уже не означает последовательность любых символов), а так же SQL стандартный SIMILAR TO (так же со своим синтаксисом, похожим на регулярки, но другим)

column_1 !~ '^[N0-9]' -- регулярным выражением

column_1 not similar to '[N0-9]%' -- для similar to символ % используется аналогично like
→ Ссылка