SQL PLSQL 语法手册2

本文详细介绍了Oracle中TO_DATE、TO_NUMBER、ADD_MONTHS、LAST_DAY、MONTHS_BETWEEN、NEXT_DAY、ROUND、TRUNC等常用日期与字符串转换函数的用法与示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1.3. 函數:TO_DATE

语法:

TO_DATE(string,format)

用途:

根据给定的格式将一个字符串转换成Oracle的日期值.

该函数的主要用途是用来验证输入的日期值.在应用程序中,用户必须验证输入日期是否有效,如月份是否在1~12之间和日期中的天数是否在指定月份的天数内.


1.4. 函數:TO_NUMBER

语法:

TO_NUMBER(string[,format])

用途:

该函数将一个字符串转换成相应的数值.对于简单的字符串转换数值(例如几位数字加上小数点).格式是可选的.


2. 日期函数

2.1. 函數:ADD_MONTHS

语法:

ADD_MONTHS(date,number)

用途:

在日期date上加指定的月数,返回一个新日期.如果给定为负数,返回值为日期date之前几个月的日期.number应当是个整数,如果是小数,正数被截为小于该数的最大整数,负数被截为大于该数的最小整数.

例如:

SELECT TO_CHAR(ADD_MONTHS(sysdate,1),

'DD-MON-YYYY') "Next month"

FROM dual

Next month

-----------

19-FEB-2000

2.2. 函數:LAST_DAY

语法:

LAST_DAY(date)

用途:

返回日期date所在月份的最后一天的日期.

例如:

SELECT SYSDATE, LAST_DAY(SYSDATE) "Last",

LAST_DAY(SYSDATE) - SYSDATE "Days Left"

FROM DUAL

SYSDATE Last Days Left

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

19-JAN-00 31-JAN-00 12

2.3. 函數:MONTHS_BETWEEN

语法:

MONTHS_BETWEEN(date1,date2)

用途:

返回两个日期之间的月份.如果两个日期月份内的天数相同(或者都是某个月的最后一天),返回值是整数.否则,返回值是小数,每于1/31月来计算月中剩余天数.如果第二个日期比第一个日期还早,则返回值是负数.

例如:

SELECT MONTHS_BETWEEN(TO_DATE('02-02-1992', 'MM-DD-YYYY'),

TO_DATE('01-01-1992', 'MM-DD-YYYY'))

"Months"

FROM DUAL

Months

----------

1.03225806

SELECT MONTHS_BETWEEN(TO_DATE('02-29-1992', 'MM-DD-YYYY'),

TO_DATE('01-31-1992', 'MM-DD-YYYY'))

"Months"

FROM DUAL

Months

----------

1

2.4. 函數:NEXT_DAY

语法:

NEXT_DAY(date,day)

用途:

该函数返回日期date指定若天后的日期.注意:参数day必须为星期,可以星期几的英文完整拼写,或前三个字母缩写,或数字1,2,3,4,5,6,7分别表示星期日到星期六.例如,查询返回本月最后一个星期五的日期.

例如:

SELECT NEXT_DAY((last_day(sysdate)-7),'FRIDAY')

FROM dual

NEXT_DAY(

---------

28-JAN-00

2.5. 函數:ROUND

语法:

NEXT_DAY(date[,format])

用途:

该函数把一个日期四舍五入到最接近格式元素指定的形式.如果省略format,只返回date的日期部分.例如,如果想把时间(24/01/00 14:58:41)四舍五入到最近的小时.下表显示了所有可用格式元素对日期的影响.

Format Element

Result

SS

24/01/00 14:58:41

MI

24/01/00 14:59:00

HH

24/01/00 15:00:00

DD

25/01/00 00:00:00

MM

01/02/01 00:00:00

YY

01/01/00 00:00:00

CC

01/01/00 00:00:00

例如:

SELECT to_char(ROUND(sysdate,'HH'),'DD-MON-YY HH24:MI:SS')

FROM dual

TO_CHAR(ROUND(SYSDATE,'HH'),'DD-MON-YYHH24:MI:SS')

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

24-JAN-00 15:00:00

2.6. 函數:TRUNC

语法:

TRUNC(date[,format])

用途:

TRUNC函数与ROUND很相似,它根据指定的格式掩码元素,只返回输入日期用户所关心的那部分,与ROUND有所不同,它删除更精确的时间部分,而不是将其四舍五入.

例如:

SELECT TRUNC(sysdate)

FROM dual

TRUNC(SYS

---------

24-JAN-00

FLOOR函数:求两个日期之间的天数用;

select floor(sysdate - to_date('20080805','yyyymmdd')) from dual;


3. 字符函数

3.1. 函數:ASCII

语法:

ASCII(character)

用途:

返回指定字符的ASCII码值.如果为字符串时,返回第一个字符的ASCII码值.

例如:

SELECT ASCII('Z')

FROM dual

ASCII('Z')

----------

90

3.2. 函數:CHR

语法:

CHR(number)

用途:

该函数执行ASCII函数的反操作,返回其ASCII码值等于数值number的字符.该函数通常用于向字符串中添加不可打印字符.

例如:

SELECT CHR(65)||'BCDEF'

FROM dual

CHR(65

------

ABCDEF


3.3. 函數:CONCAT

语法:

CONCAT(string1,string2)

用途:

该函数用于连接两个字符串,将string2跟在string1后面返回,它等价于连接操作符(||).

例如:

SELECT CONCAT(This is a, computer)

FROM dual

CONCAT('THISISA','

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

This is a computer

它也可以写成这样:

SELECT This is a|| computer

FROM dual

'THISISA'||'COMPUT

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

This is a computer

这两个语句的结果是完全相同的,但应尽可能地使用||操作符.

3.4. 函數:INITCAP

语法:

INITCAP(string)

用途:

该函数将字符串string中每个单词的第1个字母变成大写字母,其它字符为小写字母.

例如:

SELECT INITCAP(first_name||'.'||last_name)

FROM employee

WHERE department_id=12

INITCAP(FIRST_NAME||'.'||LAST_N

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

Chris.Alberts

Matthew.Fisher

Grace.Roberts

Michael.Douglas

3.5. 函數:INSTR

语法:

INSTR(input_string,search_string[,n[,m]])

用途:

该函数是从字符串input_string的第n个字符开始查找搜索字符串的第m次出现,如果没有找到搜索的字符串,函数将返回0.如果找到,函数将返回位置.

例如:

SELECT INSTR('the quick sly fox jumped over the

lazy brown dog','the',2,1)

FROM dual

INSTR('THEQUICKSLYFOXJUMPEDOVERTHELAZYBROWNDOG','THE',2,1)

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

31

3.6. 函數:INSTRB

语法:

INSTRB(input_string,search_string[,n[,m]])

用途:

该函数类似于INSTR函数,不同之处在于INSTRB函数返回搜索字符串出现的字节数,而不是字符数.在NLS字符集中仅包含单字符时,INSTRB函数和INSTR函数是完全相同的.

3.7. 函數:LENGTH

语法:

LENGTH(string)

用途:

该函数用于返回输入字符串的字符数.返回的长度并非字段所定义的长度,而只是字段中占满字符的部分.以列实例中,字段first_name定义为varchar2(15).

语法:

SELECT first_name,LENGTH(first_name)

FROM employee

FIRST_NAME LENGTH(FIRST_NAME)

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

JOHN 4

KEVIN 5

3.8. 函數:LENGTHB

语法:

LENGTHB(string)

用途:

该函数用于返回输入字符串的字节数.对于只包含单字节字符的字符集来说LENGTHB函数和LENGTH函数完全一样.

3.9. 函數:LOWER

语法:

LOWER(string)

用途:

该函数将字符串string全部转换为小写字母,对于数字和其它非字母字符,不执行任何转换.

3.10. 函數:UPPER

语法:

UPPER(string)

用途:

该函数将字符串string全部转换为大写字母,对于数字和其它非字母字符,不执行任何转换.

3.11. 函數:LPAD

语法:

LPAD(string,length[,set])

用途:

在字符串string的左边加上一个指定的字符集set,从而使串的长度达到指定的长度length.参数set可以是单个字符,也可以是字符串.如果string的长度小于length时,取string字符串的前length个字符.

语法:

SELECT first_name,LPAD(first_name,20,' ')

FROM employee

FIRST_NAME LPAD(FIRST_NAME,20,'')

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

JOHN JOHN

KEVIN KEVIN

3.12. 函數:RPAD

语法:

RPAD(string,length[,set])

用途:

在字符串string的右边加上一个指定的字符集set,从而使串的长度达到指定的长度length.参数set可以是单个字符,也可以是字符串.如果string的长度小于length时,取string字符串的前length个字符.

例如:

SELECT first_name,rpad(first_name,20,'-')

FROM employee

FIRST_NAME RPAD(FIRST_NAME,20,'-')

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

JOHN JOHN----------------

KEVIN KEVIN---------------

3.13. 函數:LTRIM

语法:

LTRIM(string[,set])

用途:

该函数从字符串的左边开始,去掉字符串set中的字符,直到看到第一个不在字符串set中的字符为止.

例如:

SELECT first_name,ltrim(first_name,'BA')

FROM employee

WHERE first_name='BARBARA'

FIRST_NAME LTRIM(FIRST_NAM

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

BARBARA RBARA

3.14. 函數:RTRIM

语法:

RTRIM(string[,set])

用途:

该函数从字符串的右边开始,去掉字符串set中的字符,直到看到第一个不在字符串set中的字符为止.具有NULL值的字段不能与具有空白字符的字段相比较.

这是因为空白字符与NULL字符是完全不同的两种字符.该函数的另外一个用途是当进行字段连接时去掉不需要的字符.

3.15. 函數:SUBSTR

语法:

SUBSTR(string,start[,length])

用途:

该函数从输入字符串中取出一个子串,从start字符处开始取指定长度的字符串,如果不指定长度,返回从start字符处开始至字符串的末尾.

3.16. 函數:REPLACE

语法:

REPLACE(string,search_set[,replace_set])

用途:

该函数将字符串中所有出现的search_set都替换成replace_set字符串.可以使用该函将字符串中所有出现的符号都替换成某个有效的名字.如果不指定replace_set,则将从字符串string中删除所有的搜索字符串search_set.

例如:

SELECT REPLACE('abcdefbdcdabc,dsssdcdrd','abc','ABC')

FROM dual

REPLACE('ABCDEFBDCDABC,

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

ABCdefbdcdABC,dsssdcdrd

3.17. 函數:TRANSLATE

语法:

TRANSLATE(string,search_set,replace_set)

用途:

该函数用于将所有出现在搜索字符集search_set中的字符转换成替换字符集replace_set中的相应字符.注意:如果字符串string中的某个字符没有出现在搜索字符集中.则它将原封不动地返回.如果替换字符集replace_set比搜索字符集search_set小,那么搜索字符集search_set中后面的字符串将从字符串string中删除.

例如:

SELECT TRANSLATE('GYK-87M','0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ',

9999999999xxxxxxxxxxxxxx')

FROM dual

TRANSL

------

xx-99x


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值