2012-05-13 26 views
7

Bir SQL desen ifadesi ve arasındaki tüm numaraları eşleştirmek istediğiniz arasındaki tüm numaraları maç için.MSSQL desen [1-999]

DÜZENLEME: MSSQL yılında

. regex var gibi

+0

Tüm DBMS desen ve joker aramalar açısından aynı standardı izleyin. Spesifik olmalısın. Başlangıçta sorunuzun da doğru etiketleri yoktu. – Hameed

cevap

10

bir karakter sınıfı için SQL GİBİ operatör desen eşleştirme kullanarak, karakter sınıfının hiçbir joker tekrarı yok. Diğer bir deyişle, size karşılaştırabilirsiniz önce [0-9]+ veya [0-9]{1,3} gibi şeyler

Yani, sıfır-pad ile numarasına sahip (bunlardan ikisi de 0 yakalayacağı) yapamaz.

doğrudan bir desen değil, ama bu ifadesi GİBİ operatör bağlı olarak görev yapar ve aralarında pozitif tamsayılar için çalışacak 1 ve 999:

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

Düzenleme: varsayım şey olmadığı yapılan Belirttiğinizden beri Microsoft SQL Server hakkında konuşun.

+0

Hangi DBMS '' GİBİ '' [0-9] [0-9] [0-9] ''çalışacak? Standart bir SQL 'LIKE' joker karakteri değildir (standart SQL sadece'% 've' _' joker karakterlerini, "aralıklarını" anlamamaktadır) –

+0

Bazılarının hepsi büyük ölçüde regex'i desteklemese de. MySQL'de "NEREDE REGEXP" yazabilirim^[1-9] [0-9] {1,2} $ ' – Hameed

+0

@Hameed: Bunu anlıyorum, ama örneğiniz 'LIKE' operatörünü kullanmadı. –

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

DÜZENLEME:Bu yalnızca PostgreSQL çalışacaktır.

sonra, böyle bir şey dizeleri eşleştirmek için bir regexp desen arıyorsanız: regexp patterns üzerine dokümantasyon

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

kontrol dışarı.

SQL Server normal ifadeleri desteklemez olduğu gibi. Regular Expressions in SQL Server servers?:
Aşağıdaki workaround Bu soruyu veya kullanabilirsiniz.

+0

Sql desenini istiyorum! – ARZ

+1

@ARZ, yani SQL, * uzak * daha spesifik olmanız gerekecek. – huon