PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

PostgreSQL डेटाबेस कॉलम से केवल संख्यात्मक मान लौटाएं

निम्नलिखित 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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. स्कीमा और विचारों का उपयोग करके PostgreSQL उपयोगकर्ता पहुंच को सीमित करें

  2. क्या सर्वर होस्ट लोकलहोस्ट (::1) पर चल रहा है और पोर्ट 5432 पर टीसीपी/आईपी कनेक्शन स्वीकार कर रहा है?

  3. Pl/pgsql फ़ंक्शन में कॉपी स्टेटमेंट के साथ डायग्नोस्टिक प्राप्त करें

  4. प्रारंभिक डेटा के साथ docker पोस्टग्रेज कमिट्स पर कायम नहीं है

  5. पोस्टग्रेस्क्ल में विंडोज़ पर .sql फ़ाइल आयात करना