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

अमान्य संख्या

आप गैर-संख्यात्मक मानों को इस तरह के उत्तर प्रदान करने वाले फ़ंक्शन के साथ फ़िल्टर कर सकते हैं। , या रेगुलर एक्सप्रेशन के साथ - जिसमें कुछ बदलाव की आवश्यकता हो सकती है:

select count(1), result_num
from vitals
where test_cd = 'TEMP'
and regexp_like(result_num, '^[-]?[0-9]*[\.]?[0-9]*$')
and cast(result_num as integer) > 104
group by result_num;

SQL Fiddle

यह अधिकांश गैर-संख्याओं को बाहर कर देगा (शायद सभी, लेकिन मुझे विश्वास नहीं है - रेगेक्स एक मजबूत क्षेत्र नहीं है), हालांकि जस्टिन का कार्य शायद सुरक्षित है।

हालांकि, अभी भी इस बात की कोई गारंटी नहीं है कि कास्ट से पहले फ़िल्टर फ़ंक्शन लागू किया जाएगा। यदि यह अभी भी ऊपर जाता है तो आप गैर-संख्यात्मक मानों को फ़िल्टर करने के लिए एक सबक्वायरी का उपयोग कर सकते हैं और फिर उन लोगों के वास्तविक मूल्य की जांच कर सकते हैं; लेकिन आपको शायद Oracle को सबक्वेरी को अननेस्ट करने और आप पर मूल्यांकन आदेश बदलने से रोकने के लिए एक संकेत जोड़ने की आवश्यकता होगी।

एक अन्य दृष्टिकोण जस्टिन के कार्य का एक रूपांतर है जो वास्तविक संख्या देता है:

CREATE OR REPLACE FUNCTION safe_number( p_str IN VARCHAR2 )
  RETURN NUMBER DETERMINISTIC PARALLEL_ENABLE
IS
  l_num NUMBER;
BEGIN
  l_num := to_number( p_str );
  RETURN l_num;
EXCEPTION
  WHEN value_error THEN
    RETURN null;
END safe_number;
/

तब आपकी क्वेरी इसका उपयोग कर सकती है:

select count(1), result_num
from vitals
where test_cd = 'TEMP'
and safe_number(result_num) > 104
group by result_num;

SQL Fiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एसक्यूएल में कॉलम मान की निरंतर घटना गणना कैसे प्राप्त करें?

  2. ODP.NET के साथ Oracle डेटाबेस परिवर्तन अधिसूचना काम नहीं करती है

  3. एसक्यूएल का सबसे लगातार मूल्य कैसे प्राप्त करें

  4. नौकरी कैसे बनाएं, जब जॉब_एक्शन को सीएलओबी पैरामीटर वाली प्रक्रिया को कॉल करने की आवश्यकता होती है

  5. Oracle के डंप (सिस्टिमस्टैम्प) बाइट्स का अर्थ