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