2017-01-16 60 views
1

有沒有辦法使用模式匹配和SQL LIKE來匹配可變數目的字符和上限?與SQL匹配的模式就像一系列字符一樣

例如,我有一列可以具有2-10個數字的「正確值」,超過10且小於2的任何值都是不正確的。

+1

它是一個字符串列或INT? – Dekel

+1

'len(f)在2和10之間且isnumeric(f)= 1'時的情況? –

+2

@ WHERE col NOT LIKE'%[^ 0-9]%'and BETWEEN 2 AND 10' –

回答

3

如果你真的想使用like你可以這樣做:

where col like '__' or col_like '___' or . . . 

或:

where col like '__%' and  -- at least two characters 
     col not like '_________%' -- not 9 characters 

比較典型的方法是:

where len(col) between 2 and 10 

如果你想確保他們的數字:

where len(col) between 2 and 10 and 
     col not like '%[^0-9]%' 
+0

完美,謝謝!最後一點工作! – Christa

-2

您可以使用正則表達式。

SELECT * FROM mytable WHERE mycol LIKE '%[0-9]{2,10}%'; 

應該這樣做(這是我的頭頂部,因此請仔細檢查

+1

不幸的是,LIKE在T-SQL中沒有RegEx支持。 –

+0

它看起來像它有一些東西:https://msdn.microsoft.com/en-us/library/ms187489(SQL.90).aspx 雖然我懷疑'{2,10}'不會去工作。 –

+0

@Grim ...是的,我一直在指那個頁面。 {2,10}不起作用。 – Christa

-1

你可以做一個函數來做到檢查每一個字符像下面的這個很長的路要走!

DECLARE @TempField varchar(max)= '1v3Abc567' 

DECLARE @FieldLength int = LEN(@TempField) 
DECLARE @CountNumeric int = 0 

WHILE @FieldLength > 0 
BEGIN 
SELECT @CountNumeric = @CountNumeric + ISNUMERIC(SUBSTRING (@TempField,@FieldLength,1)) 
SET @FieldLength = @FieldLength - 1 
END 

SELECT @CountNumeric NumericCount 
相關問題