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

Oracle में एक कॉलम में सभी गैर-संख्यात्मक मान खोजें

यदि आप कभी भी एक वर्ण स्तंभ का सामना करते हैं जो एक संख्यात्मक स्तंभ होना चाहिए, तो इस बात की हमेशा संभावना होती है कि इसमें गैर-संख्यात्मक डेटा हो, जिसके बारे में आप नहीं जानते हैं।

Oracle डेटाबेस में, आप कॉलम से गैर-संख्यात्मक डेटा वापस करने के लिए निम्न की तरह एक क्वेरी चला सकते हैं।

नमूना डेटा

आइए VARCHAR2 . के साथ एक नमूना तालिका बनाएं कॉलम और डेटा डालें:

DROP TABLE t1;
CREATE TABLE t1 (
    c1 varchar2(255)
);
INSERT ALL 
INTO t1 (c1) VALUES ('0')
INTO t1 (c1) VALUES ('1')
INTO t1 (c1) VALUES ('+1')
INTO t1 (c1) VALUES ('-1')
INTO t1 (c1) VALUES ('00.00')
INTO t1 (c1) VALUES ('73.45')
INTO t1 (c1) VALUES ('+73.45')
INTO t1 (c1) VALUES ('-73.45')
INTO t1 (c1) VALUES ('.246')
INTO t1 (c1) VALUES ('-.34e7')
INTO t1 (c1) VALUES ('12.e-3')
INTO t1 (c1) VALUES ('1.2e+4')
INTO t1 (c1) VALUES ('a')
INTO t1 (c1) VALUES ('9afc')
INTO t1 (c1) VALUES ('e7')
INTO t1 (c1) VALUES ('+e0')
INTO t1 (c1) VALUES ('Ten')
INTO t1 (c1) VALUES ('5 Dollars')
SELECT 1 FROM DUAL;

यहाँ तालिका में क्या है:

SELECT * FROM t1;

परिणाम:

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 NOT REGEXP_LIKE(c1, '^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$');

परिणाम:

12.e-3
a
9afc
e7
+e0
Ten
5 Dollars

गैर-पूर्णांक लौटाएं

अगर हम केवल गैर-पूर्णांक लौटाना चाहते हैं, तो क्वेरी बहुत आसान हो सकती है:

SELECT c1
FROM t1 
WHERE NOT REGEXP_LIKE(c1, '^[0-9]+$');

परिणाम:

+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 c1 
FROM t1 
WHERE NOT REGEXP_LIKE(c1, '[0-9]+');

परिणाम:

a
Ten

हम वैकल्पिक रूप से समान परिणाम प्राप्त करने के लिए POSIX कक्षाओं का उपयोग कर सकते हैं:

SELECT c1 
FROM t1 
WHERE NOT REGEXP_LIKE(c1, '[[:digit:]]');

परिणाम:

a
Ten

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-01460:लागू नहीं किया गया या अनुचित रूपांतरण का अनुरोध किया गया

  2. वीएस इकाई ढांचे में ओरेकल इकाई कोड में प्राथमिक कुंजी अपडेट नहीं करती है

  3. Oracle में न्यूलाइन कैरेक्टर कैसे दर्ज करें?

  4. Oracle में केस स्टेटमेंट के साथ कंडीशनल WHERE क्लॉज

  5. oracle NCHAR या NVARCHAR कॉलम में राष्ट्रीय वर्ण डालने से काम नहीं चलता