2012-05-13 8 views
7

Chcę wyrażenie SQL wzór dopasować wszystkie numery między i .MSSQL wzór dopasować wszystkie numery między [1-999]

EDIT:

w MSSQL.

+0

Nie wszystkie DBM mają taki sam standard w odniesieniu do wzorców i wyszukiwań z użyciem symboli wieloznacznych. Musisz być konkretny. Początkowo twoje pytanie również nie miało odpowiednich tagów. – Hameed

Odpowiedz

10

Podczas korzystania z dopasowywania wzorców LIKE w SQL dla klasy znaków, nie ma powtórzenia wieloznacznego klasy znaków, tak jak w regex. Innymi słowy, nie można zrobić rzeczy jak [0-9]+ lub [0-9]{1,3} (oba z nich będzie również przechwytywać 0)

Tak, masz zero-pad numer, zanim będzie można go porównać.

To nie jest bezpośrednio wzór, ale to wyrażenie opiera się w części na operatora LIKE i będzie pracować dla dodatnich liczb całkowitych między 1 i 999:

RIGHT('00' + myfield, 3) LIKE '[0-9][0-9][0-9]' 
AND RIGHT('00' + myfield, 3) <> '000' 
AND LEN(myfield) <= 3 

Edit: założenie, że jesteś mówiąc o Microsoft SQL Server, ponieważ nie określono.

+0

W którym DBMS będzie "LIKE" [0-9] [0-9] [0-9] "' działa? Z pewnością nie jest to standardowa wieloznacznik SQL 'LIKE' (standardowy SQL rozumie tylko symbole wieloznaczne'% 'i' _', nie ma "zakresów"). –

+0

Chociaż nie wszystkie oprócz niektórych obsługują w dużym stopniu wyrażenie regularne. W MySQL możesz napisać: "WHERE num REGEXP"^[1-9] [0-9] {1,2} $ ' – Hameed

+0

@Hameed: Rozumiem, ale twój przykład nie użył operatora 'LIKE'. –

5
SELECT * FROM table WHERE field BETWEEN 1 AND 999; 

EDIT:ta będzie działać tylko w PostgreSQL.

Jeśli szukasz wzorzec wyrażenia regularnego, aby dopasować ciągi, następnie coś takiego:

SELECT * FROM table WHERE field ~ '[1-9][0-9]{1,2}'; 

odjazdu dokumentacja na regexp patterns.

Serwer SQL nie obsługuje wyrażeń regularnych jako-jest.
Możesz użyć następującego workaround lub tego pytania: Regular Expressions in SQL Server servers?.

+0

Chcę, aby wzór Sql! – ARZ

+1

@ARZ, czyli SQL, musisz być * daleko * dokładniejszy. – huon

Powiązane problemy