निम्नलिखित PostgreSQL उदाहरण केवल उन पंक्तियों को लौटाते हैं जिनमें किसी दिए गए कॉलम में संख्यात्मक मान होते हैं।
नमूना डेटा
आइए नमूना डेटा के साथ एक तालिका बनाएं:
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
c1 varchar(255)
);
INSERT INTO t1 (c1) VALUES
('0'),
('1'),
('+1'),
('-1'),
('00.00'),
('73.45'),
('+73.45'),
('-73.45'),
('.246'),
('-.34e7'),
('12.e-3'),
('1.2e+4'),
('a'),
('9afc'),
('e7'),
('+e0'),
('Ten'),
('5 Dollars');
SELECT * FROM t1;
तालिका अब बनाई गई है और इसमें निम्न डेटा शामिल है:
c1 ----------- 0 1 +1 -1 00.00 73.45 +73.45 -73.45 .246 -.34e7 12.e-3 1.2e+4 a 9afc e7 +e0 Ten 5 Dollars
कॉलम एक varchar(255)
है कॉलम, इसलिए यह संख्यात्मक नहीं है। इसमें संख्याएं हो सकती हैं (और करता है) लेकिन इन्हें वर्ण डेटा के रूप में संग्रहीत किया जाता है। इसमें मनमाना पाठ भी हो सकता है (जो यह करता है)।
सभी संख्यात्मक मान लौटाएं
उपरोक्त तालिका से सभी संख्यात्मक मान वापस करने के लिए हम निम्नलिखित क्वेरी का उपयोग कर सकते हैं:
SELECT c1
FROM t1
WHERE c1 ~ '^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$';
परिणाम:
c1 -------- 0 1 +1 -1 00.00 73.45 +73.45 -73.45 .246 -.34e7 1.2e+4
रिटर्न इंटीजर
अगर हम केवल पूर्णांकों को वापस करना चाहते हैं, तो क्वेरी बहुत आसान हो सकती है:
SELECT c1
FROM t1
WHERE c1 ~ '^[0-9]+$';
परिणाम:
c1 ---- 0 1
संख्यात्मक डेटा शामिल है
यदि हम संख्यात्मक डेटा वाली पंक्तियों को खोजना चाहते हैं (भले ही उनमें गैर-संख्यात्मक डेटा भी हो), तो हम निम्न कार्य कर सकते हैं:
SELECT c1
FROM t1
WHERE c1 ~ '[0-9]+';
परिणाम:
c1 ----------- 0 1 +1 -1 00.00 73.45 +73.45 -73.45 .246 -.34e7 12.e-3 1.2e+4 9afc e7 +e0 5 Dollars
PostgreSQL में, ~
दिए गए रेगुलर एक्सप्रेशन के मिलान के लिए केस-संवेदी ऑपरेटर है। केस-संवेदी मिलान के लिए, ~*
. का उपयोग करें ।
आप !~
. का उपयोग कर सकते हैं रेगुलर एक्सप्रेशन से मेल नहीं खाने वाली सभी पंक्तियों को वापस करने के लिए (और !~*
केस-संवेदी मैचों के लिए)।
POSIX कैरेक्टर क्लासेस
Postgres POSIX वर्ण वर्गों का भी समर्थन करता है। तो हम उपयोग कर सकते हैं [:digit:]
[0-9]
. के बजाय अगर हम पसंद करते हैं।
उदाहरण:
SELECT c1
FROM t1
WHERE c1 ~ '^[[:digit:]]?$';
परिणाम:
c1 ---- 0 1