A. sql oracle 判断为数字
SELECT * FROM ITAB WHERE ISNUMERIC(FIELDNAME)>0
函数 ISNUMERIC(col1)>0 是判断字段值是否是数值的函数,若是整数、浮点等数字返回是“1”
B. oracle sql字符串转数字问题
1.将字符串类型转换为数字类型。此方法使用tonumber()直接转换。具体语法是tonumber(STR)。
C. oracle如何判断一个数是不是整数呢比如3.000和3.100,如何筛选出来3.100
select * from table where int-floor(int)>0 --int就是你的表字段,floor(int)就是取整数,等同于3.100-3>0
D. 在oracle中,如何用一条select语句查询字段中非纯数字值
--1.正则判断,适用于10g以上版本
--非正整数
select字段from表whereregexp_replace(字段,'d','')isnotnull;
--非数值类型
select字段from表whereregexp_replace(字段,'^[-+]?d+(.d+)?$','')isnotnull;
--2.自定义函数,判断非值类型
(colvarchar2)returnintegeris
inumber;
begin
i:=to_number(col);
return1;
exception
whenothersthen
return0;
end;
select字段from表whereisnumber(字段)=0;
E. oracle判断字符串是否为数字
1、通过ASCII码判断是否数字,介于[48, 57]之间,(ascii('0') = 48, ascii('9') = '57')
2、调用cast函数尝试强制转换成NUMERIC或NUMBER,不是合法数字串即抛异常
3、调用translate函数,剔除所有[0-9]数字后,看是否为空串
4、调用正则表达式,进行模式匹配(10g版本新加入的功能)
--通过ASCII码判断是否数字,介于[48,57]之间,(ascii('0')=48,ascii('9')='57')
DECLARE
strVARCHAR2(10):='123a';
valNUMERIC(10);
iint;
kint;
flagBOOLEAN;
BEGIN
flag:=TRUE;
foriin1..10loop--新密码是否6位数字
k:=ascii(substr(str,i,1));
ifk<48ork>57THEN
flag:=FALSE;
endif;
endLOOP;
IFflag=trueTHEN
dbms_output.put_line(str||'是[0-9]的数字序列');
ELSE
dbms_output.put_line(str||'不是[0-9]的数字序列');
ENDIF;
END;
--调用cast函数尝试强制转换成NUMERIC或NUMBER,不是合法数字串即抛异常
DECLARE
strVARCHAR2(10):='123';
valNUMERIC(10);
BEGIN
val:=CAST(strASNUMERIC);
dbms_output.put_line(str||'是[0-9]的数字序列');
EXCEPTION
WHENvalue_errorTHEN--字符串转实数错误
--dbms_output.put_line(SQLCODE||','||SQLERRM);
dbms_output.put_line(str||'不是[0-9]的数字序列');
END;
--调用translate函数,剔除所有[0-9]数字后,看是否为空串
DECLARE
strVARCHAR2(10):='123abc';
BEGIN
IFreplace(translate(str,'0123456789','0'),'0','')ISNULLTHEN
dbms_output.put_line(str||'是[0-9]的数字序列');
ELSE
dbms_output.put_line(str||'不是[0-9]的数字序列');
ENDIF;
END;
--调用正则表达式,进行模式匹配(10g版本新加入的功能)
SELECT*
FROMal
WHEREregexp_like('1234','^[[:digit:]]+$');
--从任意字符串中提取数字串(调用2次translate函数)。
--假定初始串为str。首先将str中数字全部替换为空格,输出记为str2;
--其次,对每个在str中出现的任意str2串中字符,如果是str2的首字符则替换为空格,其它字符则全部剔除
DECLARE
--strVARCHAR2(100):='护照01浙江23昆山4苏3';
strVARCHAR2(100):='护照浙江昆山苏4';
retVARCHAR2(10);
BEGIN
ret:=TRIM(TRANSLATE(str,trim(TRANSLATE(str,'1234567890','')),''));
dbms_output.put_line(ret);
END;
F. 如何在oracle中用SQL语句比较字符串型和数字型
Oracle比较字符串是根据ASCII码来的,第一个字母的ASCII大小比较如果相等再比较下一个,类推。
字符串和数字进行操作是会报异常的,因为类型不一样不能进行比较。
Oracle在执行SQL的时候有些时候会自动转换,比如:
select * from chan_customer cc where cc.customer_id = '1';
即使customer_id是数字型的也可以查出来,但是Oracle有区分字符和数字
就是通过加不加单引号来区分。
G. Oracle sql语句number与varchar2类型
使select 'a4000000'-1000000 from al不报错
那你要什么样的结果呢?
因为你别的行, 可能是正确的.
到了这一行 数据不对, 你又不希望抱错。
那么你是不是希望, 如果 遇到非法字符了, 结果就为 NULL 或者 -1 之类的?
如果是这个情况。
你可以考虑用 CASE WHEN 的处理机制
也就是
CASE WHEN 字符是合法数字 THEN 字符1 - 数字
ELSE NULL ( 或者 -1 ) END
来进行处理。
至于 字符是合法数字 的判断。
SQL Server 里面比较省事, 直接有个 ISNUMERIC 函数可以判断。
Oracle 没有 直接的函数。
不过可以通过 REGEXP_LIKE 进行 正则表达式的检查。
来判断 字符是否是合法的数字。
H. oracle判断是否是数字
可以使用正则表达式的方式来判断。
REGEXP_LIKE( 字段 , '(^[+-]?\d{0,}\.?\d{0,}$)'
来判断 是否是数字
SQL> SELECT NULL
2 FROM al
3 WHERE REGEXP_LIKE(NULL,'(^[+-]?\d{0,}\.?\d{0,}$)');
未选定行
SQL>
SQL> SELECT 'Abc'
2 FROM al
3 WHERE REGEXP_LIKE('Abc','(^[+-]?\d{0,}\.?\d{0,}$)');
未选定行
SQL>
SQL> SELECT '100'
2 FROM al
3 WHERE REGEXP_LIKE('100','(^[+-]?\d{0,}\.?\d{0,}$)');
'10
---
100
SQL>
SQL> SELECT '-100'
2 FROM al
3 WHERE REGEXP_LIKE('-100','(^[+-]?\d{0,}\.?\d{0,}$)');
'-10
----
-100
SQL>
SQL> SELECT '.01'
2 FROM al
3 WHERE REGEXP_LIKE('.01','(^[+-]?\d{0,}\.?\d{0,}$)');
'.0
---
.01
SQL>
SQL> SELECT '1995-10-1'
2 FROM al
3 WHERE REGEXP_LIKE('1995-10-1','(^[+-]?\d{0,}\.?\d{0,}$)');
未选定行
SQL>
SQL> SELECT '1/20/95'
2 FROM al
3 WHERE REGEXP_LIKE('1/20/95','(^[+-]?\d{0,}\.?\d{0,}$)');
未选定行
I. sql判断是否为数字
不知道楼主的意思是不是要判断一个字段是否为纯数字还是说是否包含数字?
可以用oracle自带的正则表达式函数regexp_replace把数字全部取出来,然后计算数字的长度是否等于这个字段的长度,如果等于的话说明这个值全部是数字,如果不等于的话说明值里面包含非数字,测试语句如下:
select(regexp_replace('lss12345',
'[^0-9]'))
from
al;---取出值里面的全部数字
select
length('lss12345'),length(regexp_replace('lss12345',
'[^0-9]'))
from
al;
---查询出字段的长度和字段内数字的长度
select*
from
al
where
length('lss12345')
=
length(regexp_replace('lss12345',
'[^0-9]'))
;
----查询这个字段所有的纯数字列
J. oracle如何判断某个字段的值是不是数字
1、创建测试表,
create table test_isnum(id number, value varchar2(20));