नीचे प्रत्येक 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