पूर्णांक के लिए जाँच करने के लिए SQL LIKE शर्त?


83

मैं वर्णमाला के माध्यम से जाने और उपयुक्त पत्र के साथ शुरू होने वाली सभी वस्तुओं को सूचीबद्ध करने के लिए SQL LIKE शर्तों के एक सेट का उपयोग कर रहा हूं, जैसे कि सभी पुस्तकें जहां शीर्षक "A" से शुरू होता है:

SELECT * FROM books WHERE title ILIKE "A%"

यह अक्षरों के लिए ठीक है, लेकिन मैं किसी भी संख्या से शुरू होने वाली सभी वस्तुओं को कैसे सूचीबद्ध करूं? इसके लायक यह पोस्टग्रेज डीबी पर है।

जवाबों:


162

वह चयन करेगा (एक रेगेक्स द्वारा) जिसमें हर किताब जिसका शीर्षक एक नंबर से शुरू होता है, वह यह है कि आप क्या चाहते हैं?

SELECT * FROM books WHERE title ~ '^[0-9]'

यदि आप पूर्णांक चाहते हैं जो विशिष्ट अंकों से शुरू होता है, तो आप इसका उपयोग कर सकते हैं:

SELECT * FROM books WHERE CAST(price AS TEXT) LIKE '123%'

या उपयोग करें (यदि आपके सभी नंबरों में अंकों की समान संख्या है (एक बाधा तब उपयोगी होगी))

SELECT * FROM books WHERE price BETWEEN 123000 AND 123999;

1
Op2 की कोशिश करते समय मुझे "डेटा प्रकार इंट से टेक्स्ट में स्पष्ट रूपांतरण की अनुमति नहीं है।"
गिलाद

1
यदि विकल्प 2 उपरोक्त टिप्पणी में उल्लिखित स्पष्ट रूपांतरण त्रुटि देता है (जो कि SQL सर्वर और शायद अन्य कार्यक्रमों में हो सकता है), एक बड़े पर्याप्त अधिकतम आकार के साथ VARCHAR का उपयोग करने का प्रयास करें: पुस्तकों से चयन करें (जहां मूल्य VARCHAR (20) के रूप में) LIKE '% 123%'
bstrong

आपका बहुत बहुत धन्यवाद! मैं 5 पैसा जोड़ सकता हूं: आप भी उपयोग कर सकते हैं: [...] कास्ट (कीमत के रूप में) ~ * '123%' का उपयोग ~ *। इसके अलावा आप तब के अंदर किसी भी regexps का उपयोग कर सकते हैं, जैसे: [...] CAST (कीमत के रूप में) ~ * '123'
Arsenii

18

PostgreSQL नियमित अभिव्यक्ति मिलान का समर्थन करता है ।

तो, आपका उदाहरण दिखेगा

SELECT * FROM books WHERE title ~ '^\d+ ?' 

यह एक या अधिक अंकों और एक वैकल्पिक स्थान के साथ शुरू होने वाले शीर्षक से मेल खाएगा


6

यदि आप स्ट्रिंग के रूप में खोजना चाहते हैं, तो आप इस तरह से पाठ कर सकते हैं:

SELECT * FROM books WHERE price::TEXT LIKE '123%'

2

यह मानते हुए कि आप "स्ट्रिंग्स जो 7 से शुरू होते हैं" के बजाय "7 से शुरू होने वाले नंबर" की तलाश कर रहे हैं, शायद कुछ ऐसा है

select * from books where convert(char(32), book_id) like '7%'

या जो भी Postgres Convert के समतुल्य है।


2

मुझे यहाँ पार्टी में देर हो रही है, लेकिन यदि आप एक निश्चित लंबाई के पूर्णांक के साथ काम कर रहे हैं, तो आप पूर्णांक तुलना कर सकते हैं:

SELECT * FROM books WHERE price > 89999 AND price < 90100;

2

PostgreSQL 9.5 पर परीक्षण किया गया:

- केवल अंक

select * from books where title ~ '^[0-9]*$';

या,

select * from books where title SIMILAR TO '[0-9]*';

- अंक से शुरू करें

select * from books where title ~ '^[0-9]+';

0

इनमें से कौन सा इंडेक्सेबल है?

यह निश्चित रूप से btree-indexable है:

WHERE title >= '0' AND title < ':'

ध्यान दें कि ':' ASCII में '9' के बाद आता है।


0

PostreSQL में आप SIMILAR TO ऑपरेटर ( अधिक ) का उपयोग कर सकते हैं :

-- only digits
select * from books where title similar to '^[0-9]*$';
-- start with digit
select * from books where title similar to '^[0-9]%$';

1
केवल अंक: जहां शीर्षक ~ '^ [0-9] * $';
चार्ली Char

PostgreSQL 9.5 में "^" के साथ SIMILAR TO काम नहीं कर रहा है; POSIX नियमित अभिव्यक्ति "~" काम करता है।
चार्ली Char
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.