使用SQL函数


2016.11.29

四.使用SQL函数

SQL函数可以大大增加创建动态结果的能力。为使用报表的人提供更好的服务。

常用SQL函数基本上可以分为四种类型:字符函数、日期/时间函数、数值函数和转换函数。

此外也可以将多种函数组合为一个表达式,成为复合函数。

4.1 函数的作用

函数就是使用特定的公式把一个(一些)值转换为另一个(些)值的一种规则。函数分为标量函数和聚合函数。前者只针对单个数字进行运算,后者对一个较大的数据集合进行操作。每种数据库都会提供几十种标量函数,当然,他们的名称甚至工作方式都各不一样。

4.2 字符(String)函数

操作字符数据的函数。

LEFT,RIGHT,SUBSTRING,LTRIM,RTRIM,CONCAT,UPPER,LOWER

LEFT(CharacterValue,Number Of Characters):从指定的字符串CharacterValue中从左边开始查看Number Of Characters个字符并返回结果。

SELECT

LEFT (‘sunlight’,3) AS ‘The Answer’

结果:

The Answer

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

sun

在一条SELECT语句中,FROM不是必需的。当然,在ORACLE中要求所有的SELECT语句都必须有FROM子句。但是,在FROM字句中提供的表不一定需要一个真正的表,ORACLE提供了一个名为DUAL的虚拟表。

RIGHT(CharacterValue,Number Of Characters):从指定的字符串CharacterValue中从右边开始查看Number Of Characters个字符并返回结果。

注意:ORACLE中没有提供这两个函数,而是用SUBSTR函数提供相同的功能。在指定了数据类型长度的情况下要考虑字符串右边的空格。这时,要得到想要的字符串就必须用到RTRIM函数。

RTRIM函数:删除字符串右边的空格。

LTRIM函数:删除字符串左边的空格。

这两个函数不会删除字符串中间的空格。

SUBSTRING(CharacterValue,StartingPosition,NumberOfCharacters):从指定的字符串CharacterValue中从指定位置StartingPosition开始取NumberOfCharacters个字符串

SQLserver:

SELET

SUBSTRING (‘thewhitegoat’,4,5)  AS  ‘the answer’;

Mysql:函数名称和左括号间不能有空格

SELET

SUBSTRING(‘thewhitegoat’,4,5)  AS  ‘the answer’;

ORACLE:用SUBSTR函数代替,且第二个参数可以是负数,表示从右边开始计数。

SELECT

SUBSTR(‘thewhitegoat’,4,5)  AS  “the answer”

FROM DUAL;

结果:

The Answer

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

white

CONCAT函数:只用在MySqlORACLE数据库中,表示连接字符串。在ORACLE中一次只能连接两个字符串。

Mysql

SELECT

Columname1,

Columname2,

Columname3,

CONCAT(Columname1’ ’columname2)

FROM table;

ORACLE

SELECT

Columname1,

Columname2,

Columname3,

CONCAT(CONCAT(Columname1’ ’)columname2)

FROM table;

UPPERLOWER函数:将字符串转换成全部大写或者全部小写。

4.3 复合函数

在执行复合函数时,总是从里边开始,然后向外边执行。

SELECT

RIGHT(RTRIM(CharacterValue),NumberOfCharacters)

FROM table

先执行RTRIM再执行RIGHT

ORACLE中:

SELECT

SUBSTR(RTRIM(CharacterValue),-NumberOfCharacters,NumberOfCharacters)

FROM table

4.4 日期和时间函数

获取当前时间:

SQLServer

SELECT GETDATE()

MySQL

SELECT NOW();

ORACLE:

SELECT CURRENT_DATE;

分析时间:当前时间是第几天,第几个月,第几周等。

SQLserverDATPART(Datapart,DateValue)

Mysql:DATE_FORMATE(‘DateValue’,’%d’)

时间间隔:

SQLserverDATEDIFF(Datapart,StartDate,EndDate)

Mysql:DATEDIFF(EndDate,startDate)

Datapart可取:year/quarter/month/dayofyear/day/week/weekday/hour/minute/second

4.5 数值函数

ROUND(NumericValue,DecimalPlaces):NumericValue进行四舍五入,DecimalPlaces为正数表示保留几位小数,为0表示没有小数部分,为负数表示对小数点左边前几位进行四舍五入。

RAND([seed]):随机数,若没有指定seed,默认返回0~1之间的数。

PI():返回π的值。

ORACLE中没有RANDPI这两个函数。

4.6 转换函数

CAST(Expression AS DataType)

SQLserver:

SELECT

‘2009-04-110 AS ‘Original Date’,

CAST(‘2009-04-110 AS DATETIME) AS ‘Coverted Date’

ORACLE:

SELECT

‘2009-04-110 AS ‘Original Date’,

CAST(‘11-APR-20090 AS DATE) AS “Coverted Date”

FROM DUAL;

NULL值转换成有意义的值:将COLOR列中NULL值转换成Unknow

SQLserver:ISNULL(COLOR,’Unknow’)

Mysql:IFNULL(COLOR,’Unknow’)

ORACLE:NVL(COLOR,’Unknow’)

当遇到NULL值时,在ORACLE中显示的是破折号。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值