如果一个表达式成立,则....不成立则.....

[复制链接]
查看11 | 回复5 | 2014-9-12 22:37:43 | 显示全部楼层 |阅读模式
如果一个表达式成立,则....不成立则.....
这样的SQL应当如何写,可以用decode吗?以下是我的例子,但是有错误,请高手指正!在此谢过!
SQL> desc bb
名称
是否为空? 类型
----------------------------------------- -------- ------------
ID
NUMBER(38)
NAME
VARCHAR2(10)
FLAG
VARCHAR2(10)
SQL> select * from bb;
ID NAME FLAG
---------- ---------- ----------
1 555
2 444
3 aaa
4 bbb
想判断如果name是全数字的,则flag判断为"is number",否则为"isnot number",写了以下语句:
update bb set flag='is number' where decode(to_number(name),null,'no','yes')='yes' ;
以上语句提示"无效数字",
update bb set flag='is number' where decode(to_number(name),null,'no','yes')='yes'and rownum=1;
只更新了第一条记录,我是想一次性能来所有的记录是否是数字,请问应该怎么做?谢!


回复

使用道具 举报

千问 | 2014-9-12 22:37:43 | 显示全部楼层
to_number(name),
当name是字符时是会报错的,这样没法判断!
回复

使用道具 举报

千问 | 2014-9-12 22:37:43 | 显示全部楼层
知道了,谢谢sdusun大虾!
回复

使用道具 举报

千问 | 2014-9-12 22:37:43 | 显示全部楼层
You can create a function to tell if a sting is a number or not.
Such as:
FUNCTION is_number(in_str IN VARCHAR2)
RETURN NUMBER
IS
lv_number NUMBER;
BEGIN
lv_number := to_number(in_str);
RETURN 1;
EXCEPTION WHEN OTHERS THEN
RETURN 0;
END;
Then
update bb set flag='is number' where is_number(name) = 1
回复

使用道具 举报

千问 | 2014-9-12 22:37:43 | 显示全部楼层
这个问题确实麻烦.需要手工写一个function
回复

使用道具 举报

千问 | 2014-9-12 22:37:43 | 显示全部楼层
最初由 hgeng 发布
[B]You can create a function to tell if a sting is a number or not.
Such as:
FUNCTION is_number(in_str IN VARCHAR2)
RETURN NUMBER
IS
lv_number NUMBER;
BEGIN
lv_number := to_number(in_str);
RETURN 1;
EXCEPTION WHEN OTHERS THEN
RETURN 0;
END;
Then
update bb set flag='is number' where is_number(name) = 1 [/B]

应考虑一下参数为NULL的情况
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行