SQL函数

SQL函数

当我们学习编程语言的时候,也会遇到函数。函数的作用是什么呢?它可以把我们经常使用的代码封装起来,需要的时候直接调用即可。这样既提高了代码效率,又提高了可维护性。

SQL中的函数一般是在数据上执行的,可以很方便地转换和处理数据。一般来说,当我们从数据表中检索出 数据之后,就可以进一步对这些数据进行操作,得到更有意义的结果,比如返回指定条件的函数,或者求某 个字段的平均值等。

常用的SQL函数

SQL提供了一些常用的内置函数,当然你也可以自己定义SQL函数。SQL的内置函数对于不同的数据库软件 来说具有一定的通用性,我们可以把内置函数分成四类:

  1. 算术函数
  2. 字符串函数
  3. 日期函数
  4. 转换函数

这4类函数分别代表了算术处理、字符串处理、日期处理、数据类型转换,它们是SQL函数常用的划分形式

函数是对提取出来的数据进行操作,那么数据表中字段类型的定义有哪几种呢? 我们经常会保存一些数值,不论是整数类型,还是浮点类型,实际上对应的就是数值类型。同样我们也会保 存一些文本内容,可能是人名,也可能是某个说明,对应的就是字符串类型。此外我们还需要保存时间,也 就是日期类型。那么针对数值、字符串和日期类型的数据,我们可以对它们分别进行算术函数、字符串函数 以及日期函数的操作。如果想要完成不同类型数据之间的转换,就可以使用转换函数。

算术函数

算术函数,顾名思义就是对数值类型的字段进行算术运算。常用的算术函数及含义如下表所示:

函数名

定义

ABS()取绝对值
MOD()取余
ROUND()四色五入为指定的小数位数

SELECT ABS(-2),运行结果为2。

SELECT MOD(101,3),运行结果2。

SELECT ROUND(37.25,1),运行结果37.3。

字符串函数

常用的字符串函数操作包括了字符串拼接,大小写转换,求长度以及字符串替换和截取等。

具体的函数名称 及含义如下表所示:

函数名定义
CONCAT()将多个字符串拼接起来
LENGTH()计算字段的长度,一个汉字算三个字符,一个数字或字母算一个字符
CHAR_LENGTH()计算字段的长度,汉字、数字、字母都算一个字符
LOWER()将字符串中的字符转化为小写
UPPER()将字符串中的字符转化为大写
REPLACE(str,from_str,to_str)替换函数,有3个参数,分别为:要替换的表达式或字段名、想要查找的被替换字符串、替换成哪个字符串
SUBSTRING(str,pos,len)截取字符串,有3个参数,分别为:待截取的表达式或字段名、开始截取的位置、想要截取的字符串长度

SELECT CONCAT('abc', 123),运行结果为abc123。

SELECT LENGTH('你好'),运行结果为6。

SELECT CHAR_LENGTH('你好'),运行结果为2。

SELECT LOWER('ABC'),运行结果为abc。

SELECT UPPER('abc'),运行结果ABC。

SELECT REPLACE('fabcd', 'abc', 123),运行结果为f123d。

SELECT SUBSTRING('fabcd', 1,3),运行结果为fab。

日期函数

日期函数是对数据表中的日期进行处理,常用的函数包括:

函数名定义
CURRENT_ DATE()系统当前日期
CURRENT_TIME()系统当前时间,没有具体的日期
CURRENT_TIMESTAMP()系统当前时间,包括具体的日期+时间
EXTRACT()抽取具体的年、月、日
DATE()返回时间的日期部分
YEAR()返回时间的年份部分
MONTH()返回时间的月份部分
DAY()返回时间的天数部分
HOUR()返回时间的小时部分
MINUTE()返回时间的分钟部分
SECOND()返回时间的秒部分

SELECT CURRENT_DATE(),运行结果为2019-04-03。

SELECT CURRENT_TIME(),运行结果为21:26:34。

SELECT CURRENT_TIMESTAMP(),运行结果为2019-04-0321:26:34。

SELECT EXTRACT(YEAR FROM '2019-04-03'),运行结果为2019。

SELECT DATE('2019-04-01 12:00:05'),运行结果为2019-04-01。

DATE日期格式必须是yyyy-mm-dd的形式。如果要进行日期比较,就要使用DATE函数,不要直接使用日期与字符串进行比较

转换函数

转换函数可以转换数据之间的类型,常用的函数如下表所示:

函数名定义
CAST()数据类型转换,参数是一个表达式,表达式通过AS关键词分割了2个参 数,分别是原始数据和目标数据类型
COALESCE()返回第一个非空数值

SELECT CAST(123.123 AS INT),运行结果会报错。

SELECT CAST(123.123 AS DECIMAL(8,2)),运行结果为123.12。

SELECT COALESCE(null,1,2),运行结果为1。

CAST函数在转换数据类型的时候,不会四舍五入,如果原数值有小数,那么转换为整数类型的时候就会报 错。不过你可以指定转化的小数类型,在MySQL和SQL Server中,你可以用DECIMAL(a,b)来指定,其中a 代表整数部分和小数部分加起来最大的位数,b代表小数位数,比如DECIMAL(8,2)代表的是精度为8位 (整数加小数位数最多为8位),小数位数为2位的数据类型。所以SELECT CAST(123.123 AS DECIMAL(8,2))的转换结果为123.12。

使用SQL函数会带来问题

尽管SQL函数使用起来会很方便,但我们使用的时候还是要谨慎,因为你使用的函数很可能在运行环境中无法工作,这是为什么呢?

语言是有不同版本的,比如Python会有2.7版本和3.x版本,不过它们之间的函数差异不大,也就在10%左右。但我们在使用SQL语言的时候,不是直接和这门语言打交道,而是通过它使用不同的数据库软件,即DBMS。DBMS之间的差异性很大,远大于同一个语言不同版本之间的差异。实际上,只有很少的函数是被DBMS同时支持的。比如,大多数DBMS使用(||)或者(+)来做拼接符,而在MySQL中的字符串拼接函数为Concat()。大部分DBMS会有自己特定的函数,这就意味着采用SQL函数的代码可移植性是很差的,因此在使用函数的时候需要特别注意。

关于大小写的规范

写SELECT语句的时候用的是大写。实际上在SQL中,关键字和函数名是不用区分字母大小写的,比如SELECT、WHERE、 ORDER、GROUP BY等关键字,以及ABS、MOD、ROUND、MAX等函数名。

不过在SQL中,你还是要确定大小写的规范,因为在Linux和Windows环境下,你可能会遇到不同的大小写问题。

比如MySQL在Linux的环境下,数据库名、表名、变量名是严格区分大小写的,而字段名是忽略大小写的。 而MySQL在Windows的环境下全部不区分大小写。 这就意味着如果你的变量名命名规范没有统一,就可能产生错误。这里有一个有关命名规范的建议:

  1. 关键字和函数名称全部大写;
  2. 数据库名、表名、字段名称全部小写;
  3. SQL语句必须以分号结尾。

虽然关键字和函数名称在SQL中不区分大小写,也就是如果小写的话同样可以执行,但是数据库名、表名和 字段名在Linux MySQL环境下是区分大小写的,因此建议你统一这些字段的命名规则,比如全部采用小写的方式。同时将关键词和函数名称全部大写,以便于区分数据库名、表名、字段名。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值