2017-01-16 5 views
1

Gibt es eine Möglichkeit Pattern Matching mit SQL LIKE, zu verwenden, um eine variable Anzahl von Zeichen mit einer oberen Grenze übereinstimmen?Pattern Matching mit SQL Wie für eine Reihe von Zeichen

Zum Beispiel habe ich eine Spalte, die „richtige Werte“ von 2-10 Zahlen haben kann, etwas mehr als 10 und weniger als 2 sind falsch.

+1

eine String-Spalte oder int ist es? – Dekel

+1

'Fall wenn len (f) zwischen 2 und 10 und isnumeric (f) = 1 '? –

+2

WHERE col NOT LIKE '% [^ 0-9]% UND ZWISCHEN 2 UND 10' –

Antwort

3

Wenn Sie wirklich like verwenden möchten, können Sie tun:

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

oder:

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

Je mehr typische Methode wäre:

where len(col) between 2 and 10 

Wenn Sie sie Zahlen sind, um sicherzustellen:

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

Perfekt, danke! Das letzte bisschen hat funktioniert! – Christa

-2

können Sie Regex verwenden.

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

sollte es tun (das ist aus der Spitze von meinem Kopf, so doppelt überprüfen

+1

LIKE hat leider keine RegEx-Unterstützung in T-SQL. –

+0

Es sieht aus wie es hat etwas: https://msdn.microsoft.com/en-us/library/ms187489(SQL.90).aspx Obwohl ich, dass 'vermuten {2,10}' geht nicht Arbeit. –

+0

@Grim ... Ja, ich habe mich auf diese Seite bezogen. Und {2,10} funktioniert nicht. – Christa

-1

Sie könnten eine Funktion, um diese den langen Weg zu tun, machen von einzelnen Zeichen wie unter Inspektion:

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