Как преобразовать этот запрос регулярных выражений в Oracle для SQL Server? - PullRequest
0 голосов
/ 25 июня 2019

Я новичок с запросом регулярных выражений, поэтому я хочу спросить вас, как преобразовать этот запрос регулярных выражений в Oracle в SQL Server?

select * 
from Sales 
where regexp_like(productname,'^[A-Z]{3}[0-9]+$')

Я конвертирую его в этот запрос:

select * 
from Sales 
where substr(productname, 1, 3) in ([A-Z]) 

Это правильно?

Thankyou.

Ответы [ 3 ]

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

Вы можете использовать следующий запрос:

SELECT *
FROM Sales
WHERE LEFT(productname, 3) LIKE '[A-Z][A-Z][A-Z]' -- three chars ([A-Z]{3})
  AND NOT RIGHT(productname, LEN(productname) - 3) LIKE '%[^0-9]%' -- only numbers after the first three chars
  AND NOT LEN(RIGHT(productname, LEN(productname) - 3)) = 0 -- at least one number

демо на dbfiddle.uk

0 голосов
/ 25 июня 2019

Думаю, самым простым было бы использовать

WHERE 
   SUBSTRING(<column>, 1, 1) IN('A', 'B', 'C')
 AND
   SUBSTRING(<column>, 2, 1) IN('A', 'B', 'C')
 AND
   SUBSTRING(<column>, 2, 1) IN('A', 'B', 'C') 
 AND
   TRY_CONVERT(
        INT
        , SUBSTRING(<column>, 4, LEN(<column>))
   ) <> 0

так как вам не нужно регулярное выражение для этого.

см. демо

0 голосов
/ 25 июня 2019

На основе регулярного выражения '^[A-Z]{3}[0-9]+$':

-- exactly 3 letters
-- at least one trailing digits

Вы можете использовать TRIM:

SELECT *
FROM Sales
WHERE productname LIKE '[A-Z][A-Z][A-Z][0-9]%'
  AND TRIM( '0123456789' FROM  productname) LIKE '[A-Z][A-Z][A-Z]';
      -- warning! expression is not SARGable

дБ <> демоверсия скрипки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...