Как условие оператора в выпуске данных postgresql - PullRequest
0 голосов
/ 17 октября 2018

У меня есть данные ниже в таблице

HJ-DEF-ABCF010-ABC18-09-17-D
GHJ-ABC-ABFV006-ABC18-09-18-R
OH-DEF-ABFCRT2037-ABC17-01-18-R

Я хочу заполнить значение в другом столбце, например

HJ-DEF-ABCF010-ABC18-09-17-D             BET
GHJ-ABC-ABFV006-ABD18-09-18-R            BET
OH-DEF-ABFCRT2037-ABCD17-01-18-R          BET

Как отображение для

ABC18 is BET   
ABD18 is BET
ABCD17 is BET

Я использовал приведенный ниже SQL-запрос для этого

select col1,case 
when col1 like '%-ABC[1-2][0-9]-%' then BET 
when col1 like '%-ABD[1-2][0-9]-%' then BET 
when col1 like '%-ABCD[1-2][0-9]-%' then BET
else - end form table

, который отлично работает в SQl Sever, но в Pogresql мы не можем использовать [1-2], чтобы узнать ожидаемую цифру в позиции.Любое предложение или идея, как достичь в Posgresql.

Ответы [ 3 ]

0 голосов
/ 17 октября 2018

Вы можете фактически заставить вашу текущую логику работать с LIKE, приложив немного усилий:

SELECT *
FROM Customers
WHERE Customerid LIKE '11%' OR Customerid LIKE '21%';

Возможно, вы используете синтаксис SQL Server или Sybase с расширенным LIKE.Postgres не поддерживает это, но поддерживает собственный оператор регулярных выражений ~.Подробнее об этом см. В ответе Гордона.

Для редактирования вашего вопроса можно использовать следующее:

SELECT *
FROM Customers
WHERE Customerid ~ '-[^-]{3}[1-2]7';

Демо

0 голосов
/ 17 октября 2018

Используется с ПОХОЖИМ НА, а не как.выберите col1, случай, когда col1 ПОХОЖИЕ НА '% -AB ([CD] | CD) [1-2] [0-9] -%', затем BET else - конец таблицы формы thnx @ WiktorStribiżew

0 голосов
/ 17 октября 2018

Работает просто отлично.Однако вы по какой-то причине думаете, что LIKE поддерживает классы символов и другие функции, подобные регулярным выражениям.Это просто неверно в Postgres и в любой другой базе данных, кроме SQL Server, Sybase и MS Access.

Просто используйте регулярные выражения.

Для исходной версии:

SELECT *
FROM Customers
WHERE Customerid ~ '^[1-2][1-1]'; 

Для отредактированной версии:

SELECT *
FROM Customers
WHERE Customerid ~ '[-].{3}[1-2]1'; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...