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

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

नीचे प्रत्येक SQL सर्वर, MySQL और Oracle के लिए तीन अलग-अलग कार्यान्वयन हैं। कोई भी एक ही दृष्टिकोण का उपयोग (या कर सकता है), इसलिए ऐसा करने के लिए एक क्रॉस डीबीएमएस तरीका प्रतीत नहीं होता है। MySQL और Oracle के लिए, केवल साधारण पूर्णांक परीक्षण दिखाया जाता है; SQL सर्वर के लिए, पूर्ण संख्यात्मक परीक्षण दिखाया गया है।

SQL सर्वर के लिए:ध्यान दें कि isnumeric('.') रिटर्न 1.. लेकिन इसे वास्तव में फ्लोट में परिवर्तित नहीं किया जा सकता है। कुछ टेक्स्ट जैसे '1e6' को सीधे न्यूमेरिक में नहीं बदला जा सकता है, लेकिन आप फ्लोट से गुजर सकते हैं, फिर न्यूमेरिक।

;with tmp(x) as (
    select 'db01' union all select '1' union all select '1e2' union all
    select '1234' union all select '' union all select null union all
    select '1.2e4' union all select '1.e10' union all select '0' union all
    select '1.2e+4' union all select '1.e-10' union all select '1e--5' union all
    select '.' union all select '.123' union all select '1.1.23' union all
    select '-.123' union all select '-1.123' union all select '--1' union all
    select '---1.1' union all select '+1.123' union all select '++3' union all
    select '-+1.123' union all select '1 1' union all select '1e1.3' union all
    select '1.234' union all select 'e4' union all select '+.123' union all
    select '1-' union all select '-3e-4' union all select '+3e-4'  union all
    select '+3e+4' union all select '-3.2e+4' union all select '1e1e1' union all
    select '-1e-1-1')

select x, isnumeric(x),
    case when x not like '%[^0-9]%' and x >'' then convert(int, x) end as SimpleInt,
    case
    when x is null or x = '' then null -- blanks
    when x like '%[^0-9e.+-]%' then null -- non valid char found
    when x like 'e%' or x like '%e%[e.]%' then null -- e cannot be first, and cannot be followed by e/.
    when x like '%e%_%[+-]%' then null -- nothing must come between e and +/-
    when x='.' or x like '%.%.%' then null -- no more than one decimal, and not the decimal alone
    when x like '%[^e][+-]%' then null -- no more than one of either +/-, and it must be at the start
    when x like '%[+-]%[+-]%' and not x like '%[+-]%e[+-]%' then null
    else convert(float,x)
    end
from tmp order by 2, 3

MySQL के लिए

create table tmp(x varchar(100));
insert into tmp
    select 'db01' union all select '1' union all select '1e2' union all
    select '1234' union all select '' union all select null union all
    select '1.2e4' union all select '1.e10' union all select '0' union all
    select '1.2e+4' union all select '1.e-10' union all select '1e--5' union all
    select '.' union all select '.123' union all select '1.1.23' union all
    select '-.123' union all select '-1.123' union all select '--1' union all
    select '---1.1' union all select '+1.123' union all select '++3' union all
    select '-+1.123' union all select '1 1' union all select '1e1.3' union all
    select '1.234' union all select 'e4' union all select '+.123' union all
    select '1-' union all select '-3e-4' union all select '+3e-4'  union all
    select '+3e+4' union all select '-3.2e+4' union all select '1e1e1' union all
    select '-1e-1-1';

select x,
    case when x not regexp('[^0-9]') then x*1 end as SimpleInt
from tmp order by 2

Oracle के लिए

case when REGEXP_LIKE(col, '[^0-9]') then col*1 end



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql में GROUP_CONCAT के साथ CONCAT

  2. क्या मैं VARCHAR को प्राथमिक कुंजी के रूप में उपयोग कर सकता हूं?

  3. विजुअल स्टूडियो 2015 में डेटा स्रोत जोड़ने में 'आपके पास पहले से उपयोग करने योग्य कनेक्शन है' त्रुटि

  4. PHP सर्वर पर काम नहीं कर रहा है

  5. MySQL क्वेरी का उपयोग करके JSON ऑब्जेक्ट कैसे बनाएं और डालें?