SQL基础总结(四):操作符和函数

本系列blog源自前年写的SQL学习笔记,汇总一下发上来。(1月份发了前三篇笔记,原以为后面的笔记误操作删了,今天在硬盘里又找到了,一起发上来)

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

派生列是一个计算结果。派生列不会成为表中的永久列,他们用于显示或者报表目的。

 

包含空值的任何算数运算的结果是空值。

 

在算术表达式中使用多种数字数据类型。DBMS将把所有数字转换为表达式中最复杂操作数的数据类型,并以这种类型返回结果,这个转换过程称为提升。如一个整数和一个浮点数相加,DBMS将整数转换为浮点数,然后进行数字加法,以浮点数形式返回结果。

 

有时DBMS强制数学封闭,因此一个整数除以一个整数时一定要仔细,结果可能是整数(根据DBMS而定)。

 

使用操作符||组合(连接)串。

连接串与非串时,DBMS如不能隐式转换类型,必须将非串转换为串。

包含空值的连接运算结果为空值,如’a’||null||’b’等于null。但Oracle例外(Oracle将空值当作空串处理)。

 

可以连接十六进制和二进制串:B’0100’||B’1011’等于B’01001011’

可以使用TRIM()函数从连接的串中删除不需要的空格。

CONCAT()接受任何参数并在必要时将非串转换为串(CAST则不是必须的)。OracleDB2也支持CONCAT()函数。

 

使用函数SUBSTRING()提取串的一部分。

SUBSTRING(string FROM start [FOR length])

空串的子串是空串。

例:SUBSTRING(‘abc01’ FROM 1 FOR 3) -- ‘abc’

SUBSTRING(‘abc01’ FROM 4) -- ‘01’  省略FOR时一直到串末尾

可以从十六进制或二进制中提取子串:

SUBSTRING(B’01001011’ FROM 5 FOR 4)  -- B’1011’

OracleDB2中子串函数是SUBSTR(string,start [,length]).

Oracle将空值作为空串处理:SUBSTR(NULL,1,2)返回’’.

 

使用函数UPPER()将返回小写字母转换为大写字母。使用函数LOWER()返回将大写字母转换为小写字母的串。大小写的更改只对字母起作用,数字、标点、和空格不会更改。

 

使用TRIM()删除串两端不需要的字符。可以修整前导字符、尾随字符、或者都修整。默认情况下修整空格。定义LEADING删除前导空格,定义TRAILING删除尾随空格。定义BOTH同时删除前导和尾随空格。

例:TRIM(LEADING FROM ‘   ABC   ’)  --  ‘ABC   ’;

TRIM(TRAILING FROM ‘   ABC   ’)  --  ‘   ABC’;

TRIM(BOTH FROM ‘   ABC   ’)  -- ‘ABC’;

如果不指定,默认为BOTH

DB2中,用于修整前导空格的修整函数是LTRIM(string),修整尾随空格的是RTRIM(string)。函数CHARACTER_LENGTH()返回串中字符的个数。

 

BIT_LENGTH(expr):返回表达式中位的个数,BIT_LENGTH(B’01001011’)返回8

OCTET_LENGTH(expr):返回表达式中的字节个数,OCTET_LENGTH(B’10001101’)返回1OCTET_LENGTH(‘ABC’)

位统计和字节统计函数因DBMS而异。

 

函数POSITION()在给定串中定位一个特定子串。返回在串中子串第一次出现的起始位置。

串中不含有子串,POSITION将返回0。串比较是否区分大小写依赖于DBMS

POSITION(‘ef’ IN ‘abcdef’)  -- 返回5

 

SQL标准定义了函数OVERLAY以替换子串。

OVERLAY(‘AxxxEFG’ PLACING ‘bcd’ FROM 2 FOR 3) – 返回’AbcdEFG’

 

函数EXTACT()将日期或时间间隔隔为单一的字段,并以数字形式返回。

EXTACT(field FROM date_or_time)

FieldYEARMONTHDAYHOURMINUTESECONDTIMEZONE_HOURTIMEZONE_MINUTE

EXTACT(YEAR FROM DATE ‘2011-01-12’) 返回数字2011

 

CURRENT_DATECURRENT_TIMECURRENT_TIMESTAMP从计算机系统时钟上获得当前日期和时间。

 

CURRENT_TIMECURRENT_TIMESTAMP都可以接受精度参数,CURRENT_TIME(6)返回SECOND字段中有6位数字精度的当前时间。

 

使用函数CURRENT_USER标识数据库服务器中的活动用户。

 

函数CAST()将一种数据类型的表达式转换为另一种数据类型。

CAST(expr AS data_type)

如果浮点数超出DBMS允许的SMALLINT值的范围,将FLOAT转换为SMALLINT将会失败。从DATETIMESTAMP转换中,结果中的时间部分可能是00:00:00

 

使用CASE计算条件值

CASE有两种格式:简单格式和搜索格式。

简单格式

SELECT price,

type,

CASE type   --type为条件

  WHEN ‘A’ THEN price*1.1  --type值为A时,查询price*1.1

                WHEN ‘B’THEN price*0.1  --type值为B时,查询price*0.1

  ELSE price   --没有匹配则返回默认值price

END   --注意CASEEND结尾

FROM titles

如果没有ELSE子句,默认ELSE NULL

 

搜索格式

SELECT price,

type,

CASE

  WHEN type= ‘A’ THEN price*1.1  --type值为A时,查询price*1.1

                WHEN type= ‘B’THEN price*0.1  --type值为B时,查询price*0.1

  WHEN type> ‘C’THEN price*1.2  --type值大于C时,查询price*1.2

                ELSE price  --没有匹配则返回默认值price

END  --注意CASEEND结尾

FROM titles

 

当返回结果后,CASE可能计算剩余WHEN子句中的表达式,也可能不计算,这依赖于DBMS

可以在SELECTWHEREORDER BY子句中或任何允许使用表达式的位置,使用CASE

 

使用COALESCE()检查空值

通常被用于在结果中用特定值替代空值的显示,是搜索CASE的一般形式缩写。

COALESCE(expr1,expr2)

所有表达式需要是一样的类型,或者隐式转换为一样的类型。如果表达式1和表达式2都为空值,则COALESCE()返回空值。

例:COALESCE(state,’N/A’) 如果state为空,则返回’N/A’

 

可以从不可以为空列中得到空值:

SELECT max(ID)  --ID列不能为空

FROM titles

WHERE au_name=’no this line’

 

使用NULLIF()比较表达式

函数NULLIF()比较两个表达式,如果相等则返回空值,如果不等则返回第一个表达式:

NULL(expr1,expr2)

用于转换用户定义的不适用的值为空值。

例:SELECT males,females, males/NULLIF(females,0) AS ratio

FROM school_club

females0 时,因为 0 不能做除数,所以转换为 NULL 。任何数除以 NULL 都得 NULL
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值