查看: 27527|回复: 11

[讨论] 如何判断一个值 是否为正整数

[复制链接]
论坛徽章:
4
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:52数据库板块每日发贴之星
日期:2011-01-29 01:01:012011新春纪念徽章
日期:2011-02-18 11:43:33数据库板块每日发贴之星
日期:2011-02-26 01:01:01
跳转到指定楼层
1#
发表于 2011-3-3 22:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问在plsql中 如何判断一个值 是否为正整数
要求包含特殊字符 字母 文字 不能为负数 0 也不能为小数

急~~
论坛徽章:
519
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
2#
发表于 2011-3-3 22:25 | 只看该作者
先TO_NUMBER如果没有异常则判断是否>0并且MOD(X,1)=0, 也可以用TRUNCATE

使用道具 举报

回复
论坛徽章:
4
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:52数据库板块每日发贴之星
日期:2011-01-29 01:01:012011新春纪念徽章
日期:2011-02-18 11:43:33数据库板块每日发贴之星
日期:2011-02-26 01:01:01
3#
 楼主| 发表于 2011-3-3 22:35 | 只看该作者
原帖由 newkid 于 2011-3-3 22:25 发表
先TO_NUMBER如果没有异常则判断是否>0并且MOD(X,1)=0, 也可以用TRUNCATE


我想看下 大大的具体语句...

使用道具 举报

回复
论坛徽章:
519
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
4#
发表于 2011-3-3 23:23 | 只看该作者
CREATE OR REPLACE FUNCTION f_check_int (
          p_str VARCHAR2
          )
RETURN VARCHAR2  ------- Y / N
IS
   lv_data NUMBER;
BEGIN
   lv_data := TO_NUMBER(p_str);
   IF lv_data>0 AND MOD(lv_data,1)=0 THEN
      RETURN 'Y';
   ELSE
      RETURN 'N';
   END IF;
EXCEPTION
   WHEN VALUE_ERROR THEN
        RETURN 'N';
END;
/

Function created.

Elapsed: 00:00:00.06
jsu@JSU> SELECT  f_check_int ('123') FROM DUAL;

F_CHECK_INT('123')
----------------------------------------------------------------------
Y

Elapsed: 00:00:00.14
jsu@JSU> SELECT  f_check_int ('12A3') FROM DUAL;

F_CHECK_INT('12A3')
----------------------------------------------------------------------
N

Elapsed: 00:00:00.03
jsu@JSU> SELECT  f_check_int ('123.2') FROM DUAL;

F_CHECK_INT('123.2')
----------------------------------------------------------------------
N

Elapsed: 00:00:00.01
jsu@JSU> SELECT  f_check_int ('-123') FROM DUAL;

F_CHECK_INT('-123')
----------------------------------------------------------------------
N

Elapsed: 00:00:00.01

使用道具 举报

回复
论坛徽章:
4
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:52数据库板块每日发贴之星
日期:2011-01-29 01:01:012011新春纪念徽章
日期:2011-02-18 11:43:33数据库板块每日发贴之星
日期:2011-02-26 01:01:01
5#
 楼主| 发表于 2011-3-3 23:26 | 只看该作者
原帖由 newkid 于 2011-3-3 23:23 发表
CREATE OR REPLACE FUNCTION f_check_int (
          p_str VARCHAR2
          )
RETURN VARCHAR2  ------- Y / N
IS
   lv_data NUMBER;
BEGIN
   lv_data := TO_NUMBER(p_str);
   IF lv_data>0 AND MOD(lv_data,1)=0 THEN
      RETURN 'Y';
   ELSE
      RETURN 'N';
   END IF;
EXCEPTION
   WHEN VALUE_ERROR THEN
        RETURN 'N';
END;
/

Function created.

Elapsed: 00:00:00.06
jsu@JSU> SELECT  f_check_int ('123') FROM DUAL;

F_CHECK_INT('123')
----------------------------------------------------------------------
Y

Elapsed: 00:00:00.14
jsu@JSU> SELECT  f_check_int ('12A3') FROM DUAL;

F_CHECK_INT('12A3')
----------------------------------------------------------------------
N

Elapsed: 00:00:00.03
jsu@JSU> SELECT  f_check_int ('123.2') FROM DUAL;

F_CHECK_INT('123.2')
----------------------------------------------------------------------
N

Elapsed: 00:00:00.01
jsu@JSU> SELECT  f_check_int ('-123') FROM DUAL;

F_CHECK_INT('-123')
----------------------------------------------------------------------
N

Elapsed: 00:00:00.01

多谢 ...

使用道具 举报

回复
论坛徽章:
548
生肖徽章2007版:猴
日期:2008-05-16 11:28:59生肖徽章2007版:马
日期:2008-10-08 17:01:01SQL大赛参与纪念
日期:2011-04-13 12:08:17授权会员
日期:2011-06-17 16:14:53ITPUB元老
日期:2011-06-21 11:47:01ITPUB官方微博粉丝徽章
日期:2011-07-01 09:45:27ITPUB十周年纪念徽章
日期:2011-09-27 16:30:472012新春纪念徽章
日期:2012-01-04 11:51:222012新春纪念徽章
日期:2020-11-30 22:13:24海蓝宝石
日期:2012-02-20 19:24:27
6#
发表于 2011-3-4 00:01 | 只看该作者
CREATE OR REPLACE FUNCTION f_check_int (p_str VARCHAR2)
RETURN VARCHAR2  
IS
   l_data NUMBER;
BEGIN
   l_data := TO_NUMBER(p_str);
   IF l_data=ABS(ROUND(l_data)) THEN
      RETURN 'Y';
   ELSE
      RETURN 'N';
   END IF;
EXCEPTION
   WHEN VALUE_ERROR THEN
        RETURN 'N';
END;

使用道具 举报

回复
论坛徽章:
25
ITPUB9周年纪念徽章
日期:2010-10-08 09:31:21指数菠菜纪念章
日期:2016-07-04 17:43:29指数菠菜纪念章
日期:2016-04-01 15:37:26处女座
日期:2016-03-30 15:13:11秀才
日期:2016-03-28 10:21:13射手座
日期:2016-03-24 10:09:15摩羯座
日期:2016-02-26 19:11:20水瓶座
日期:2016-02-23 15:30:40巨蟹座
日期:2016-01-18 16:08:50天枰座
日期:2016-01-06 11:54:29
7#
发表于 2011-3-4 16:02 | 只看该作者
select * from
(select to_number(&P_NUM) num from dual where regexp_like(&P_NUM, '^(\+)?[[:digit:]]+$')
) where num <> 0

使用道具 举报

回复
论坛徽章:
0
8#
发表于 2011-3-4 17:08 | 只看该作者
有一个函数是SIGN可以判定 正 负,但是判定小数的话,还是只有使用大师的方法了

使用道具 举报

回复
论坛徽章:
12
咸鸭蛋
日期:2011-11-28 23:48:04托尼托尼·乔巴
日期:2018-07-30 15:26:06山治
日期:2018-07-26 13:26:23马上加薪
日期:2014-04-15 02:56:59马上有房
日期:2014-03-31 12:14:25ITPUB社区12周年站庆徽章
日期:2013-08-20 11:30:11林肯
日期:2013-07-30 18:00:552010广州亚运会纪念徽章:射箭
日期:2013-06-26 17:43:12紫蛋头
日期:2013-05-10 14:07:392013年新春福章
日期:2013-02-25 14:51:24
9#
发表于 2013-6-8 12:16 | 只看该作者
nice 小知识积累

使用道具 举报

回复
论坛徽章:
115
生肖徽章:狗
日期:2007-01-06 21:14:12马上有车
日期:2014-03-06 16:45:08马上加薪
日期:2014-05-09 12:27:582014年世界杯参赛球队: 英格兰
日期:2014-07-03 13:10:44青年奥林匹克运动会-竞技体操
日期:2014-09-10 15:30:57马上有钱
日期:2014-10-31 13:56:48美羊羊
日期:2015-03-04 14:48:582015年新春福章
日期:2015-03-06 11:57:31懒羊羊
日期:2015-04-23 19:26:10金牛座
日期:2015-09-17 08:21:44
10#
发表于 2013-6-8 12:38 | 只看该作者
简单点
select CASE WHEN trunc(10.1)-10.1=0 AND 10.1>0 THEN  ‘正整数' ELSE  '不是正整数' END from dual;

使用道具 举报

回复

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

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表