![](/img/trans.png)
[英]How to convert ADO.NET SQL Server parametrized query to ORACLE query (in Regex)?
[英]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
基於正則表達式'^[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
認為最簡單的方法就是使用
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.