簡體   English   中英

如何將Oracle中的此正則表達式查詢轉換為SQL Server?

[英]How to convert this regex Query in Oracle to SQL Server?

我是正則表達式查詢的初學者,因此我想問您如何將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]) 

那是對的嗎?

謝謝。

您可以使用以下查詢:

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上的演示

基於正則表達式'^[AZ]{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

db <> fiddle演示

認為最簡單的方法就是使用

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

因為您確實不需要正則表達式來執行此操作。

觀看演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM