2012-05-13 7 views
7

मैं एक एसक्यूएल पैटर्न अभिव्यक्ति और के बीच सभी नंबरों का मिलान करना चाहते सभी नंबरों को मैच के लिए।MSSQL पैटर्न के बीच [1-999]

संपादित करें:

MSSQL में।

+0

पैटर्न और वाइल्डकार्ड खोजों के संबंध में सभी डीबीएम समान मानक का पालन नहीं करते हैं। आपको विशिष्ट होना चाहिए। प्रारंभ में आपके प्रश्न में सही टैग नहीं थे। – Hameed

उत्तर

10

एक वर्ण वर्ग के लिए SQL में LIKE ऑपरेटर पैटर्न-मिलान का उपयोग करते समय, रेगेक्स में वर्ण वर्ग की कोई वाइल्डकार्ड दोहराना नहीं है। दूसरे शब्दों में, आप [0-9]+ या [0-9]{1,3} तरह बातें (इन दोनों को भी 0 पर कब्जा होगा)

तो, आप शून्य-पैड के लिए संख्या है इससे पहले कि आप तुलना कर सकते हैं नहीं कर सकते।

यह सीधे एक पैटर्न नहीं है, लेकिन इस अभिव्यक्ति तरह ऑपरेटर पर भाग में निर्भर करता है और के बीच धनात्मक पूर्णांक के लिए काम करेंगे 1 और 999:

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

संपादित करें: धारणा बना है कि आप कर रहे हैं माइक्रोसॉफ्ट एसक्यूएल सर्वर के बारे में बात करते हुए, क्योंकि आपने निर्दिष्ट नहीं किया था।

+0

जिसमें डीबीएमएस 'पसंद करेंगे' [0-9] [0-9] [0-9] '' काम? यह निश्चित रूप से एक मानक एसक्यूएल 'LIKE' वाइल्डकार्ड नहीं है (मानक एसक्यूएल केवल '%' और '_' वाइल्डकार्ड, नहीं" श्रेणियां "समझता है) –

+0

हालांकि कुछ भी कुछ हद तक regex का समर्थन नहीं करते हैं। MySQL में आप 'WHERE num REGEXP'^[1-9] [0-9] {1,2} $ ' – Hameed

+0

@Hameed लिख सकते हैं: मैं समझता हूं, लेकिन आपके उदाहरण ने' LIKE' ऑपरेटर का उपयोग नहीं किया था। –

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

संपादित करें:यह केवल PostgreSQL में काम करेंगे।

आप कुछ इस तरह तार मैच के लिए है, तो एक regexp पैटर्न के लिए देख रहे हैं:

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

regexp patterns पर दस्तावेजीकरण चेक बाहर।

SQL सर्वर नियमित अभिव्यक्तियों का समर्थन नहीं करता जैसा कि है।
आप निम्नलिखित workaround या इस प्रश्न का उपयोग कर सकते हैं: Regular Expressions in SQL Server servers?

+0

मुझे एसक्यूएल पैटर्न चाहिए! – ARZ

+1

@ARZ, जो कि एसक्यूएल है, आपको * दूर * अधिक विशिष्ट होना होगा। – huon

संबंधित मुद्दे