Oracle中判断字段是否为数字篮球世界杯赌球

2020-05-02 10:25 来源:未知

在我们平常的开发中可能会遇到这样的问题,就是判断某一列是否全部由数字组成,我们都知道oracle并没有给我们提供这样一个现成的函数,那么根据我的经验我总结了两个行之有效的方法:

【**函数】Oracle**函数系列(1)--字符函数

1.使用trim translate函数:

 

复制代码 代码如下:select * from table where trim(translate(column,'0123456789',' ')) is NULL;

1  BLOG文档结构图

篮球世界杯赌球 1 

 

这里要注意的是:translate函数的第三个参数是一个空格,不是'', 因为translate的第三个参数如果为空的话,那么永远返回'',这样的就不能达到过滤纯数字的目的。这样把所有的数字都转化为空格,如果全部是由数 构成,那么一旦trim后自然是空,实现了上述目标。当然如果想排除空项的话,可以这样写:

2  前言部分

 

复制代码 代码如下:select * from table where trim(translate(nvl(column,'x'),'0123456789',' ')) is NULL;--x 表示任何'0-9'以外的字符。

2.1  导读和注意事项

各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~:

① 常见字符函数(lower、upper、initcap、concat、substr、length、intr、lpad、rpad、trim、chr、ascii、replace、translate)的使用

② 判断字符串中是否含有汉字

③ substr和instr的联合使用

④ 替换函数的使用

 

Tips:

① 本文在itpub(http://blog.itpub.net/26736162)、博客园(http://www.cnblogs.com/lhrbest)和微信公众号(xiaomaimiaolhr)上有同步更新。

② 文章中用到的所有代码、相关软件、相关资料及本文的pdf版本都请前往小麦苗的云盘下载,小麦苗的云盘地址见:http://blog.itpub.net/26736162/viewspace-1624453/。

③ 若网页文章代码格式有错乱,请尝试以下办法:①去博客园地址阅读,②下载pdf格式的文档来阅读。

④ 在本篇BLOG中,代码输出部分一般放在一行一列的表格中。其中,需要特别关注的地方我都用灰色背景和粉红色字体来表示,比如在下边的例子中,thread 1的最大归档日志号为33,thread 2的最大归档日志号为43是需要特别关注的地方;而命令一般使用黄色背景和红色字体标注;对代码或代码输出部分的注释一般采用蓝色字体表示。

  List of Archived Logs in backup set 11

  Thrd Seq     Low SCN    Low Time            Next SCN   Next Time

  ---- ------- ---------- ------------------- ---------- ---------

  1    32      1621589    2015-05-29 11:09:52 1625242    2015-05-29 11:15:48

  1    33      1625242    2015-05-29 11:15:48 1625293    2015-05-29 11:15:58

  2    42      1613951    2015-05-29 10:41:18 1625245    2015-05-29 11:15:49

  2    43      1625245    2015-05-29 11:15:49 1625253    2015-05-29 11:15:53

[ZHLHRDB1:root]:/>lsvg -o

T_XLHRD_APP1_vg

rootvg

[ZHLHRDB1:root]:/>

00:27:22 SQL> alter tablespace idxtbs read write;

====》2097152*512/1024/1024/1024=1G

本文如有错误或不完善的地方请大家多多指正,ITPUB留言或QQ皆可,您的批评指正是我写作的最大动力。

 

2.使用regexp_like函数:

2.2  相关文章链接

【推荐】 oracle中如何判断一个字符串是否含有汉字

http://blog.itpub.net/26736162/viewspace-1688209/

Oracle中如何判断一个字符串是否含有汉字(2)

http://mp.weixin.qq.com/s?__biz=MzIzOTA2NjEzNQ==&mid=2454771569&idx=1&sn=5bb10af43556c18906540ffe76ba87cf&chksm=fe8bba09c9fc331f0152b38067150920e75bac8cdd13fd1a2d881fdfec835ef152b54e2c798c&scene=21#wechat_redirect

Oracle中如何判断一个字符串是否含有汉字

http://mp.weixin.qq.com/s?__biz=MzIzOTA2NjEzNQ==&mid=2454771284&idx=1&sn=ab4e725c4d4ad448e245e1668ccac382&scene=21#wechat_redirect

【函数】wm_concat包的订制

http://mp.weixin.qq.com/s?__biz=MzIzOTA2NjEzNQ==&mid=2454771521&idx=1&sn=e75d27d085892a4be051c4c2e736f97a&chksm=fe8bba39c9fc332f3a2af83918cdb2afa1c83a7faf15971ce566c4321540c38e51279dd615a2&scene=21#wechat_redirect

复制代码 代码如下:select * from table where regexp_like(column,'^[0-9] [0-9]$');

2.3  本文简介

最近因为360云盘停止个人用户服务的事情要忙,所以等待事件系列就不更新了,转而更新函数系列吧,毕竟函数比较简单嘛。

本篇文章为第一篇,讲解所有的字符函数。

先来一道考题:

Which four are types of functions available in SQL? (Choose 4)

A. string

B. character

C. integer

D. calendar

E. numeric

F. translation

G. date

H. conversion

Answer: B,E,G,H

 

这里要注意的是:regexp_like函数不是在所有的oracle版本中 都能使用的。regexp_like是oracle支持正则表达式的四个函数:regexp_like,regexp_replace,regexp_instr,regexp_substr中的 一个,有关这方面更加详细信息,请关注相关文档。

3  字符函数 

字符函数是 oracle 中最常用的函数,我们来看看有哪些字符函数:

 

(一)大小写控制函数

l lower(char):将字符串全部转化为小写的格式。

l upper(char):将字符串全部转化为大写的格式。

l initcap('SQL course') 每个单词的首字母大写,其余变为小写,结果:Sql Course,

 

(二)字符控制函数

l concat('Hello','World') 字符串连接,结果:HelloWorld

l length(char):返回字符串的长度。

l substr(char,m,n):取字符串的子串,m表示起点,n 代表取 n 个字符的意思

l replace(char1,search_string,replace_string) 替换

l instr(char1,char2,[,n[,m]]) 取子串在字符串的位置(特别取某一个特殊字符在原字符串中的位置)

l trim('    Hello   World    '), 结果为: “Hello   World”

l ltrim('    Hello   World    '),结果为: “Hello   World    ”

l rtrim('    Hello   World    '),结果为: “    Hello   World”

l lpad(salary,10,'*') 结果:*****24000

l rpad(salary, 10, '*') 结果:24000*****

l chr()函数将ASCII码转换为字符: ASCII码 –》 字符;

l ascii()函数将字符转换为ASCII码:字符 –》 ASCII码;

 

总结一下,如果oracle支持regexp_like函数,推荐使用正则的方式,如果不支持则用trim translate这种方式。

3.0.1   lower: **将字符串全部转化**为小写的格式

SQL> select lower('Hello WORLD') from dual;

 

LOWER('HELL

-----------

hello world

 

SQL> Select ENAME,LOWER(ENAME) From SCOTT.EMP;

 

ENAME      LOWER(ENAM

---------- ----------

SMITH      smith

ALLEN      allen

WARD       ward

JONES      jones

MARTIN     martin

BLAKE      blake

CLARK      clark

SCOTT      scott

KING       king

TURNER     turner

ADAMS      adams

JAMES      james

FORD       ford

MILLER     miller

 

 

3.0.2   upper: **将字符串全部转化为大**写的格式

经常用于比较字符串的内容:

SQL> select upper('Hello WORLD') from dual;

 

UPPER('HELL

-----------

HELLO WORLD

 

SQL> select ename,sal,hiredate from scott.emp where lower(ename) = 'ward';

 

ENAME             SAL HIREDATE

---------- ---------- -------------------

WARD             1250 1981-02-22 00:00:00

 

3.0.3   initcap**:每个字符串的首字母大写,其余变为小写**

select initcap('SQL coURse ') from dual;

结果:

篮球世界杯赌球 2 

 

3.0.4   concat:连接两个不同的列,concat只能接受两个参数

SQL> Select CONCAT(EMPNO,ENAME) From SCOTT.EMP;

 

CONCAT(EMPNO,ENAME)

--------------------------------------------------

7369SMITH

7499ALLEN

7521WARD

7566JONES

7654MARTIN

7698BLAKE

7782CLARK

7788SCOTT

7839KING

7844TURNER

7876ADAMS

7900JAMES

7902FORD

7934MILLER

 

14 rows selected.

 

SQL> Select CONCAT('A','B') From dual;

 

CO

--

AB

 

SQL> select concat(concat('A','B'),'c') from dual;--可以嵌套使用

 

CON

---

ABc

可以使用连字符 ||  来连接多列:

SELECT 'A'||'B' FROM dual;

篮球世界杯赌球 3 

 

 

3.0.5   substr:截取子串

下标从1开始,这个函数有三个参数,允许你将目标字符串的一部份输出,第一个参数为目标字符串,第二个参数是将要输出的子串的起点,第三个参数是将要输出的子串的长度,如果没有第三个参数,则余下的字符全部输出。

注意:如果第二个参数为负数 那么将会从目标字符串的尾部开始向前定位至负数的绝对值的位置

Select SUBSTR(ENAME,2) From EMP--从第2个位置截到末尾

Select SUBSTR(ENAME,2,3) From EMP--从第2个位置截取3个字母

 

SELECT SUBSTR('lihuarong',0,3) col_1**,**

 SUBSTR('lihuarong',1,3)col_2**,**

        SUBSTR('lihuarong',3)col_3**,**

 SUBSTR('lihuarong',-4,3) col_4

FROM DUAL;

SYS@raclhr1> SELECT SUBSTR('lihuarong',0,3) col_1,

  2              SUBSTR('lihuarong',1,3)col_2,

  3          SUBSTR('lihuarong',3)col_3,

  4              SUBSTR('lihuarong',-4,3) col_4

  5  FROM DUAL;

 

COL COL COL_3   COL

--- --- ------- ---

lih lih huarong ron

 

注意: 如果第二个参数大于第一个参数的长度,则第一个参数从该列默认的长度开始计算。如下例的name列默认的长度为10

 

select name,substr(name,-4,3**),**

       substr(name,-5,3) 

from dual;

篮球世界杯赌球 4 

3.0.6   length:求字符串长度

SELECT length('重庆贵阳30N重庆贵阳30N-77623') FROM dual;

篮球世界杯赌球 5 

 

SELECT length(77623) FROM dual;

篮球世界杯赌球 6 

 

SELECT length(sysdate),sysdate FROM dual;

篮球世界杯赌球 7 

 

SELECT length(1/2) FROM dual;

篮球世界杯赌球 8 

 

SELECT length('1/2'),

       length(1 / 2**),**

       1 / 2**,**

 length(0.5**)**

FROM   dual;

篮球世界杯赌球 9 

一、 Oracle中 length 和 lengthb 区别** **

The LENGTH functions return the length of char. LENGTH calculates length usingcharacters as defined by the input character set.  --返回以字符为单位的长度.

LENGTHB usesbytes instead of characters.  --返回以字节为单位的长度.

LENGTHC usesUnicode complete characters. --返回以Unicode完全字符为单位的长度.

LENGTH2 usesUCS2 code points.--返回以UCS2代码点为单位的长度.

LENGTH4 usesUCS4 code points.  --返回以UCS4代码点为单位的长度.

 

char can be any of the data types CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB, or NCLOB. The exceptions are LENGTHC, LENGTH2, and LENGTH4, which do not allow char to be a CLOB or NCLOB. The return value is of data type NUMBER. If char has data type CHAR, then the length includes all trailing blanks. If char is null, then this function returns null.

Restriction on LENGTHB The LENGTHB function is supported for single-byte LOBs only. It cannot be used with CLOB and NCLOB data in a multibyte character set.

Examples

The following example uses the LENGTH function using a single-byte database character set:

SELECT LENGTH('CANDIDE') "Length in characters"

  FROM DUAL;

Length in characters


                   7

The next example assumes a double-byte database character set.

SELECT LENGTHB ('CANDIDE') "Length in bytes"

  FROM DUAL;

 

Length in bytes


             14

 

SQL> select length('北京') from dual;

LENGTH('北京')


             2

SQL> select lengthb('北京') from dual;

LENGTHB('北京')


              6

SQL> select lengthb('BeiJing') from dual;

LENGTHB('BEIJING')


                 7

SQL> select length('BeiJing') from dual;

LENGTH('BEIJING')


                7

 

值得一提的是:

在不同的数据库,因为字符集的不同,LENGTHB得到的值可能会不一样。如ZHS16GBK采用两个byte位来定义一个汉字。而在UTF8,采用3个byte。

--查看字符集语句

SQL> select * from nls_database_parameters where parameter='NLS_CHARACTERSET';

PARAMETER                      VALUE

select lengthb('齐'),length('齐') from dual

在计算单字节的字符串时。返回的值是相同的。

select lengthb('string'),length('string') from dual

2 、通过对同一个字符串的长度判断

lengthb(string)=length(string)

可以判断是否含有汉字。

例子

SELECT lengthb('齐'),

       length('齐')

FROM   dual;

篮球世界杯赌球 10 

 

SELECT l.code,

       length(l.code),

       lengthb(l.code),

       length2(l.code),

       length4(l.code),

       lengthc(l.code)

FROM   xb_link l

WHERE  length(l.code)篮球世界杯赌球, != lengthb(l.code)

AND    length(l.code) < 20**;**

篮球世界杯赌球 11 

二、 判断字符串中是否含有汉字

参考:

【推荐】 oracle中如何判断一个字符串是否含有汉字

http://blog.itpub.net/26736162/viewspace-1688209/

Oracle中如何判断一个字符串是否含有汉字(2)

http://mp.weixin.qq.com/s?__biz=MzIzOTA2NjEzNQ==&mid=2454771569&idx=1&sn=5bb10af43556c18906540ffe76ba87cf&chksm=fe8bba09c9fc331f0152b38067150920e75bac8cdd13fd1a2d881fdfec835ef152b54e2c798c&scene=21#wechat_redirect

Oracle中如何判断一个字符串是否含有汉字

http://mp.weixin.qq.com/s?__biz=MzIzOTA2NjEzNQ==&mid=2454771284&idx=1&sn=ab4e725c4d4ad448e245e1668ccac382&scene=21#wechat_redirect

 

 

3.0.7   instr :相当于String类中的indexOf,求索引

如果需要知道在一个字符串中满足特定的内容的子串位置可以使用INSTR,它的第一个参数是目标字符串, 第二个参数是匹配的内容,第三和第四个参数是数字,用以指定开始搜索的起点以及指出第几个满足条件的将会被返回。

默认第三个与第四个参数的数值均为1,如果第三个数值为负数那么将会从后向前搜索。

如果未匹配到则返回0;

SELECT INSTR('HelloWHoldhH', 'H', 6, 2) l1, --从第6个位置开始,第2次出现H的位置

       INSTR('HelloWHoldhH', 'H') l2, --从第1个位置开始,第1次出现H的位置

       INSTR('HelloWHoldhH', 'H', 2) l3, --从第2个位置开始,第1次出现H的位置

       INSTR('HelloWHoldhH', 'H', -1) l4, --从倒数第1个位置开始从右往左搜索,第1次出现H的位置

       INSTR('HelloWHoldhH','/')  l5--从第1个位置开始,第1次出现H的位置,如果匹配不到则返回0

FROM   DUAL;

SYS@raclhr1> SELECT INSTR('HelloWHoldhH', 'H', 6, 2) l1, --从第6个位置开始,第2次出现H的位置

  2         INSTR('HelloWHoldhH', 'H') l2, --从第1个位置开始,第1次出现H的位置

  3         INSTR('HelloWHoldhH', 'H', 2) l3, --从第2个位置开始,第1次出现H的位置

  4         INSTR('HelloWHoldhH', 'H', -1) l4, --从倒数第1个位置开始从右往左搜索,第1次出现H的位置

  5         INSTR('HelloWHoldhH','/')  l5--从第1个位置开始,第1次出现H的位置,如果匹配不到则返回0

  6  FROM   DUAL;

        L1         L2         L3         L4         L5

---------- ---------- ---------- ---------- ----------

        12          1          7         12          0

 

 

篮球世界杯赌球 12 

 

注意:无论是从前向后还是从后向前搜索,返回的数值都是从左到右的数值。

 

TAG标签:
版权声明:本文由美洲杯赌球发布于计算机教程,转载请注明出处:Oracle中判断字段是否为数字篮球世界杯赌球