`

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
分享到:
评论

相关推荐

    数据库应用(SQL Server):11 操作符和函数.ppt

    数据库应用(SQL Server):11 操作符和函数.ppt

    SQL操作符和函数

    详细讲述了SQL的有关语法,以及多个函数的运用示例。

    SQL函数大总结_实用的SQL函数

    SQL函数大总结 实用的sql函数 ABS(x) 函数,此函数用来返回一个数的绝对值。 ACOS(x)函数,返回X的反余弦值。X范围从1到-1,输入值从0到派,以弧度为单位。 ASIN(x)函数,返回X的反正弦值。X范围从1到-1,输入值从-...

    操作符及sql函数PPT课件.pptx

    操作符及sql函数PPT课件.pptx

    操作符及sql函数学习教案.pptx

    操作符及sql函数学习教案.pptx

    操作符及sql函数PPT学习教案.pptx

    操作符及sql函数PPT学习教案.pptx

    第九章-操作符及sql函数.ppt

    第九章-操作符及sql函数.ppt

    GBase 8a SQL参考手册

    型、操作符和函数、DDL 和 DML 语句,以及存储过程和自定义函数,手册中还提 供了示例以供读者参考。 第一章详细介绍了 GBase 8a 支持的数据类型,包括数值类型、字符类型、 二进制数据类型、日期和时间类型,并对...

    Oracle从基础到熟练(太实用了)

    ②:SQL 操作符和SQL函数 四.数据管理 ①:增/删/改 ②:约束 ③:一些查询 五.锁,表分区 ①:锁的概念 ②:并发问题 ③:锁机制 ④:锁的类型 ②:常见分区 六.数据库对象管理 ①:同义词 ②:序列 ③:视图 ④:...

    PostgreSQL中文手册9.2

    五、位串函数和操作符: 五、位串函数和操作符: 五、位串函数和操作符: 五、位串函数和操作符: 五、位串函数和操作符: .29 PostgreSQL PostgreSQL PostgreSQL学习手册 学习手册 学习手册 (函数和操作符 函数和...

    收集整理的SQL Server自定义函数

    30.自定义函数实现位操作 58 31.求某段时间内星期几的天数 61 32.根据进舍位或四舍五入来求值 63 33.字符串转成16进制函数 64 34.去掉字段中多个带区号电话号码前面的区号 65 35.SQL2000/2005字符串拆分为列表通用...

    PostgreSQL教程(五):函数和操作符详解(1)

    一、逻辑操作符:  常用的逻辑操作符有:AND、OR和NOT。其语义与其它编程语言中的逻辑操作符完全相同。 二、比较操作符:  下面是PostgreSQL中提供的比较操作符列表...三、 数学函数和操作符:  下面是PostgreSQL中

    SQL入门常见问题总结与实用技巧介绍.docx

    以下是一份SQL开发常见技巧的Word大纲格式列表: SQL基础技巧 规范书写: 使用缩进和空行提高语句可读性。 尽量避免不必要的子查询,采用连接JOIN操作提高效率。 注释习惯: ...存储过程与函数: 编写高

    YCY学习SQL

    8、 UNION 和 UNION ALL 操作符 13 9、 SELECT INTO语句 13 10、 CREATE DATABASE与CRESTE TABLE 15 11、 SQL 约束 16 12、 CREATE INDEX创建索引 25 13、 DROP语句集合 25 14、 AUTO INCREMENT字段 27 15、 视图...

    MYSQL,SQLSERVER,ORACLE常用的函数

    SQL中的单记录函数 1.ASCII 返回与指定的字符对应的十进制数; SQL> select ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ') space from dual; A A ZERO SPACE --------- --------- --------- --------- ...

    Microsoft SQL Server 2005 Express Edition SP3

    SQL Server Express 联机丛书中的“硬件和软件要求 (SQL Server Express)”主题中没有提供操作系统的精确列表。SQL Server Express 支持下列操作系统。 Windows Server 2003 SP1 Windows Server 2003 Enterprise ...

    SQL Server数据库技术大全 电子书

    2.6 操作符/47 2.7 流程控制/49 2.7.1 批处理/49 2.7.2 语句块/51 2.7.3 条件语句/51 2.7.4 循环语句/52 2.8 函数/53 2.8.1 函数简介/53 2.8.2 聚合函数/55 2.8.3 日期和时间函数/56 2.8.4 数学函数/57 2.8.5 字符串...

    PL/SQL 基础.doc

    1) 运算符 + - * / **(指数操作符) 2) 关系 =(相当于JAVA中的==) > < <> != ~= ^= <= >= 3) 赋值 := 例子a:=2 4) 连接 || 例: 'abc' || 123 5) 标号 需要的标记 >> 6) 注释 --(单行) /* */(段落) 7) 替代...

Global site tag (gtag.js) - Google Analytics