您的位置:首页 > 数据库 > Oracle

PLSQL常用函数(ORACLE)(2)

2016-04-25 00:00 495 查看
摘要: PLSQL ORACLE 函数 高级应用

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

1、Dateadd

在向指定日期加上一段时间的基础上,返回新的 datetime 值。

语法 :DATEADD(datepart,number,date)

参数

datepart

是规定应向日期的哪一部分返回新值的参数。下表列出了识别的日期部分和缩写。

日期部分 缩写

Year yy, yyyy

quarter qq, q

Month mm, m

dayofyear dy, y

Day dd, d

Week wk, ww

Hour hh

minute mi, n

second ss, s

millisecond ms

number

是用来增加datepart的值。如果指定一个不是整数的值,则将废弃此值的小数部分。

例如,如果为datepart指定day,为number指定1.75,则date将增加1。

date

是返回datetime或smalldatetime值或日期格式字符串的表达式。有关指定日期的更多信息,请参见datetime和smalldatetime。

如果您只指定nian份的最后两位数字,则小于或等于"两位数nian份截止期"配置选项的值的最后两位数字的数字所在世纪与截止nian所

在世纪相同。大于该选项的值的最后两位数字的数字所在世纪为截止nian所在世纪的前一个世纪。

例如,如果two digit year cutoff 为 2049(默认),则 49 被解释为 2049,2050 被解释为 1950。

为避免模糊,请使用四位数的nian份。

返回类型

返回 datetime,但如果 date 参数是 smalldatetime,返回 smalldatetime。

2、DATEDIFF

返回跨两个指定日期的日期和时间边界数。

一、 语法

DATEDIFF ( datepart , startdate , enddate )

二、参数

datepart

是规定了应在日期的哪一部分计算差额的参数。下表列出了 Microsoft? SQL Server? 识别的日期部分和缩写。

日期部分 缩写

year yy, yyyy

quarter qq, q

Month mm, m

dayofyear dy, y

Day dd, d

Week wk, ww

Hour hh

minute mi, n

second ss, s

millisecond ms

startdate

是计算的开始日期。startdate 是返回 datetime 或 smalldatetime 值或日期格式字符串的表达式。

因为 smalldatetime 只精确到分钟,所以当用 smalldatetime 值时,秒和毫秒总是 0。

如果您只指定nian份的最后两位数字,则小于或等于"两位数nian份截止期"配置选项的值的最后两位数字的数字所在世纪与截止nian所在世纪相同。大于该选项的值的最后两位数字的数字所在世纪为截止nian所在世纪的前一个世纪。例如,如果 two digit year cutoff 为 2049(默认),则 49 被解释为 2049,2050 被解释为 1950。为避免模糊,请使用四位数的nian份。

enddate

是计算的终止日期。enddate 是返回 datetime 或 smalldatetime 值或日期格式字符串的表达式。

三、返回类型

integer

四、用法

此函数计算两个指定日期之间日期部分的数目。结果为日期部分中等于(date2 - date1)的有符号的整数值。

当结果不是日期部分的偶数倍时,DATEDIFF 将被截断而不是被舍入。

当使用 day 作为日期部分时,DATEDIFF 返回两个指定的时间之间(包括第二个日期但不包括第一个日期)的午夜数。

当使用 month 作为日期部分时,DATEDIFF 返回两个日期之间(包括第二个日期但不包括第一个日期)出现的月的第一天的数目。

当使用 week 作为日期部分时,DATEDIFF 返回两个日期(包括第二个日期但不包括第一个日期)之间星期日的数目。

对于更小的时间单位存在溢出值:

milliseconds 24 天

seconds 68 nian

minutes 4083 nian

others 没有溢出限制

如果超出这些限制,此函数将返回溢出错误。

五、标准和兼容性

SQL/92 Transact-SQL 扩展。

SQL/99 Transact-SQL 扩展。

Sybase 与 Adaptive Server Enterprise 兼容。

六、示例

下面的语句返回 1:

select datediff( hour, ''4:00am'', ''5:50am'' )

下面的语句返回 102:

select datediff( month, ''1987/05/02'', ''1995/11/15'' )

下面的语句返回 0:

select datediff( day, ''00:00'', ''23:59'' )

下面的语句返回 4:

select datediff( day, ''1999/07/19 00:00'',''1999/07/23 23:59'' )

下面的语句返回 0:

select datediff( month, ''1999/07/19'', ''1999/07/23'' )

下面的语句返回 1:

select datediff( month, ''1999/07/19'', ''1999/08/23'' )

3、decode函数

  decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)

  

  该函数的含义如下:

  

  IF 条件=值1 THEN

  RETURN(翻译值1)

  ELSIF 条件=值2 THEN

  RETURN(翻译值2)

  ......

  ELSIF 条件=值n THEN

  RETURN(翻译值n)

  

  ELSE

  RETURN(缺省值)

  END IF

  

  ·使用方法:

  

  1、比较大小

  

  select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较小值

  sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1

  

  例如:

  变量1=10,变量2=20

  则sign(变量1-变量2)返回-1,decode解码结果为“变量1”,达到了取较小值的目的。

  

  2、表、视图结构转化

  

  现有一个商品销售表sale,表结构为:

  

  month    char(6)      --月份

  sell    number(10,2)   --月销售金额

  

  现有数据为:

  

  200001  1000

  200002  1100

  200003  1200

  200004  1300

  200005  1400

  200006  1500

  200007  1600

  200101  1100

  200202  1200

  200301  1300

  

  想要转化为以下结构的数据:

  

  year   char(4)      --nian份

  month1  number(10,2)   --1月销售金额

  month2  number(10,2)   --2月销售金额

  month3  number(10,2)   --3月销售金额

  month4  number(10,2)   --4月销售金额

  month5  number(10,2)   --5月销售金额

  month6  number(10,2)   --6月销售金额

  month7  number(10,2)   --7月销售金额

  month8  number(10,2)   --8月销售金额

  month9  number(10,2)   --9月销售金额

  month10  number(10,2)   --10月销售金额

  month11  number(10,2)   --11月销售金额

  month12  number(10,2)   --12月销售金额

  

  结构转化的SQL语句为:

  

  create or replace view

  v_sale(year,month1,month2,month3,month4,month5,month6,

  

  month7,month8,month9,month10,month11,month12)

  as

  select

  substrb(month,1,4),

  sum(decode(substrb(month,5,2),'01',sell,0)),

  sum(decode(substrb(month,5,2),'02',sell,0)),

  sum(decode(substrb(month,5,2),'03',sell,0)),

  sum(decode(substrb(month,5,2),'04',sell,0)),

  sum(decode(substrb(month,5,2),'05',sell,0)),

  sum(decode(substrb(month,5,2),'06',sell,0)),

  sum(decode(substrb(month,5,2),'07',sell,0)),

  sum(decode(substrb(month,5,2),'08',sell,0)),

  sum(decode(substrb(month,5,2),'09',sell,0)),

  sum(decode(substrb(month,5,2),'10',sell,0)),

  sum(decode(substrb(month,5,2),'11',sell,0)),

  sum(decode(substrb(month,5,2),'12',sell,0))

  from sale

  group by substrb(month,1,4);

4、CAST和CONVERT

将某种数据类型的表达式显式转换为另一种数据类型。CAST 和 CONVERT 提供相似的功能。

语法

使用 CAST:

CAST ( expression AS data_type )

使用 CONVERT:

CONVERT (data_type[(length)], expression [, style])

参数

expression

是任何有效的 Microsoft? SQL Server? 表达式。有关更多信息,请参见表达式。

data_type

目标系统所提供的数据类型,包括 bigint 和 sql_variant。不能使用用户定义的数据类型。有关可用的数据类型的更多信息,请参见数据类型。

length

nchar、nvarchar、char、varchar、binary 或 varbinary 数据类型的可选参数。

style

日期格式样式,借以将 datetime 或 smalldatetime 数据转换为字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型);或者字符串格式样式,借以将 float、real、money 或 smallmoney 数据转换为字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型)。

SQL Server 支持使用科威特算法的阿拉伯样式中的数据格式。

在表中,左侧的两列表示将 datetime 或 smalldatetime 转换为字符数据的 style 值。给 style 值加 100,可获得包括世纪数位的四位nian份 (yyyy)。

不带世纪数位 (yy) 带世纪数位 (yyyy)

标准

输入/输出**

- 0 或 100 (*) 默认值 mon dd yyyy hh:miAM(或 PM)

1 101 美国 mm/dd/yyyy

2 102 ANSI yy.mm.dd

3 103 英国/法国 dd/mm/yy

4 104 德国 dd.mm.yy

5 105 意大利 dd-mm-yy

6 106 - dd mon yy

7 107 - mon dd, yy

8 108 - hh:mm:ss

- 9 或 109 (*) 默认值 + 毫秒 mon dd yyyy hh:mi:ss:mmmAM(或 PM)

10 110 美国 mm-dd-yy

11 111 日本 yy/mm/dd

12 112 ISO yymmdd

- 13 或 113 (*) 欧洲默认值 + 毫秒 dd mon yyyy hh:mm:ss:mmm(24h)

14 114 - hh:mi:ss:mmm(24h)

- 20 或 120 (*) ODBC 规范 yyyy-mm-dd hh:mm:ss[.fff]

- 21 或 121 (*) ODBC 规范(带毫秒) yyyy-mm-dd hh:mm:ss[.fff]

- 126(***) ISO8601 yyyy-mm-dd Thh:mm:ss:mmm(不含空格)

- 130* 科威特 dd mon yyyy hh:mi:ss:mmmAM

- 131* 科威特 dd/mm/yy hh:mi:ss:mmmAM

* 默认值(style 0 或 100、9 或 109、13 或 113、20 或 120、21 或 121)始终返回世纪数位 (yyyy)。

** 当转换为 datetime 时输入;当转换为字符数据时输出。

*** 专门用于 XML。对于从 datetime 或 smalldatetime 到 character 数据的转换,输出格式如表中所示。对于从 float、money 或 smallmoney 到 character 数据的转换,输出等同于 style 2。对于从 real 到 character 数据的转换,输出等同于 style 1。

重要 默认情况下,SQL Server 根据截止nian份 2049 解释两位数字的nian份。即,两位数字的nian份 49 被解释为 2049,而两位数字的nian份 50 被解释为 1950。许多客户端应用程序(例如那些基于 OLE 自动化对象的客户端应用程序)都使用 2030 作为截止nian份。SQL Server 提供一个配置选项("两位数字的截止nian份"),借以更改 SQL Server 所使用的截止nian份并对日期进行一致性处理。然而最安全的办法是指定四位数字nian份。

当从 smalldatetime 转换为字符数据时,包含秒或毫秒的样式将在这些位置上显示零。当从 datetime 或 smalldatetime 值进行转换时,可以通过使用适当的 char 或 varchar 数据类型长度来截断不需要的日期部分。

下表显示了从 float 或 real 转换为字符数据时的 style 值。

值 输出

0(默认值) 最大为 6 位数。根据需要使用科学记数法。

1 始终为 8 位值。始终使用科学记数法。

2 始终为 16 位值。始终使用科学记数法。

在下表中,左列表示从 money 或 smallmoney 转换为字符数据时的 style 值。

值 输出

0(默认值) 小数点左侧每三位数字之间不以逗号分隔,小数点右侧取两位数,例如 4235.98。

1 小数点左侧每三位数字之间以逗号分隔,小数点右侧取两位数,例如 3,510.92。

2 小数点左侧每三位数字之间不以逗号分隔,小数点右侧取四位数,例如 4235.9819。

返回类型

返回与 data type 0 相同的值。

5、CHARINDEX函数

返回字符或者字符串在另一个字符串中的起始位置。CHARINDEX函数调用方法如下:

CHARINDEX ( expression1 , expression2 [ , start_location ] )

Expression1是要到expression2中寻找的字符中,start_location是CHARINDEX函数开始在expression2中找expression1的位置。

CHARINDEX函数返回一个整数,返回的整数是要找的字符串在被找的字符串中的位置。假如CHARINDEX没有找到要找的字符串,那么函数整数“0”。让我们看看下面的函数命令执行的结果:

CHARINDEX('SQL', 'Microsoft SQL Server')

这个函数命令将返回在“Microsoft SQL Server”中“SQL”的起始位置,在这个例子中,CHARINDEX函数将返回“S”在“Microsoft SQL Server”中的位置11。

接下来,我们看这个CHARINDEX命令:

CHARINDEX('7.0', 'Microsoft SQL Server 2000')

在这个例子中,CHARINDEX返回零,因为字符串“7.0” 不能在“Microsoft SQL Server”中被找到。接下来通过两个例子来看看如何使用CHARINDEX函数来解决实际的T-SQL问题。

6、DATEPART

返回代表指定日期的指定日期部分的整数。

语法

DATEPART ( datepart ,date )

参数

datepart

是指定应返回的日期部分的参数。下表列出了 Microsoft? SQL Server? 识别的日期部分和缩写。

日期部分 缩写

year yy, yyyy

quarter qq, q

month mm, m

dayofyear dy, y

day dd, d

week wk, ww

weekday dw

Hour hh

minute mi, n

second ss, s

millisecond ms

week (wk, ww) 日期部分反映对 SET DATEFIRST 作的更改。任何一

的 1 月 1 日定义了 week 日期部分的开始数字,例如:DATEPART(wk, 'Jan 1, xxxx') = 1,此处 xxxx 代表任一nian。

weekday (dw) 日期部分返回对应于星期中的某天的数,例如:Sunday = 1、Saturday = 7。weekday 日期部分产生的数取决于 SET DATEFIRST 设定的值,此命令设定星期中的第一天。

date

是返回 datetime 或 smalldatetime 值或日期格式字符串的表达式。对 1753 nian 1 月 1 日之后的日期用datetime 数据类型。更早的日期存储为字符数据。当输入 datetime 值时,始终将其放入引号中。因为 smalldatetime 只精确到分钟,所以当用 smalldatetime 值时,秒和毫秒总是 0。

如果只指定nian份的最后两位数字,则小于或等于"两位数nian份截止期"配置选项的值的最后两位数字的数字所在世纪与截止nian所在世纪相同。大于该选项的值的最后两位数字的数字所在世纪为截止nian所在世纪的前一个世纪。例如,如果 two digit year cutoff 为 2049 (默认),则 49 被解释为 2049,2050 被解释为 1950。为避免模糊,请使用四位数的nian份。

有关时间值指定的更多信息,请参见时间格式。有关日期指定的更多信息,请参见 datetime 和 smalldatetime。

返回类型

int

注释

DAY、MONTH、和 YEAR 函数分别是 DATEPART(dd, date)、DATEPART(mm, date)、和 DATEPART(yy, date) 的同义词。

示例

GETDATE 函数返回当前日期;然而,比较时并不总是需要完整的日期信息(通常只是对日期的一部分进行比较)。此示例显示 GETDATE 及 DATEPART 的输出。

SELECT GETDATE() AS 'Current Date'

GO

下面是结果集:

Current Date

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

Feb 18 1998 11:46PM

SELECT DATEPART(month, GETDATE()) AS 'Month Number'

GO

下面是结果集:

Month Number

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

2

此示例假设日期是 5 月 29 日。

SELECT DATEPART(month, GETDATE())

GO

下面是结果集:

-----------

5

(1 row(s) affected)

在此示例中,以数字表示日期。注意:SQL Server 将 0 解释为 01/01/1900。

SELECT DATEPART(m, 0), DATEPART(d, 0), DATEPART(yy, 0)

下面是结果集:

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

1 1 1900

7、SUBSTRING

功能:返回字符、二进制、文本或图像表达式的一部分

语法:SUBSTRING ( expression, start, length )

SUBSTR(str,pos): 由<str>中,选出所有从第<pos>位置开始的字元。请注意,这个语法不适用于SQL Server上。

SUBSTR(str,pos,len): 由<str>中的第<pos>位置开始,选出接下去的<len>个字元。

SQL 中的 substring 函数是用来抓出一个栏位资料中的其中一部分。这个函数的名称在不同的资料库中不完全一样:

MySQL: SUBSTR(), SUBSTRING()

Oracle: SUBSTR()

SQL Server: SUBSTRING()

参数:

expression 字符串、二进制字符串、文本、图像、列或包含列的表达式。请勿使用包含聚合函数的表达式。

start 整数或可以隐式转换为 int 的表达式,指定子字符串的开始位置。

length 整数或可以隐式转换为 int 的表达式,指定子字符串的长度。

返回值:

如果 expression 是一种支持的字符数据类型,则返回字符数据。如果 expression 是一种支持的二进制数据类型,则返回二进制数据。如果 start = 1,则子字符串从表达式的第一个字符开始。

返回字符串的类型与给定表达式的类型相同(下表所示内容除外)。

给定表达式 返回类型

image varbinary

ntext nvarchar

8、stuff

stuff的功能:删除指定长度的字符串并在指定的起始点插入另一组字符

STUFF ( character_expression , start , length , character_expression )

character_expression :操作的字符,

start:删除和插入的起始点,

length:删除的长度,

character_expression :要插入的字符

注:sql的stuff()函数和编程中数组的下标起始位置不一样,数组是以0开始的,而 stuff()函数是以 1 开始的。

如果 stuff() 函数以 0 开始的话,它是从expression1_Str 字符串的最后一个字符开始截取。例子如下所示:

例1:stuff('00000000',0,3,'123') --> 对应的结果是: (没有值输出)

例2:stuff('00000000',1,3,'123') --> 对应的结果是:12300000

9、ceiling函数 floor函数

ceiling函数返回大于或等于所给数字表达式的最小整数。

floor函数返回小于或等于所给数字表达式的最大整数。

比如

celling(12.1) 结果为 13

floor(12.1)结果为 12

在介绍这个之前你必须明白什么是oracle中的空值null
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: