MySQL心得6--MySQL语言结构--函数(三)
SELECT IFNULL(1,2), IFNULL(NULL, 'MySQL'), IFNULL(1/0,10);
结果为:1,MySQL,10.0000;
NULLIF函数的语法格式为:NULLIF(expr1,expr2)
NULLIF函数用于检验提供的两个参数是否相等,如果相等,则返回NULL,如果不相等就返回第一个参数。
例: 执行如下语句:
SELECTNULLIF(1,1), NULLIF('A', 'B'), NULLIF(2+3, 3+4);
结果为:null,A,5;
(2)IF函数
和许多脚本语言提供的IF()函数一样,MySQL的IF()函数也可以建立一个简单的条件测试。
语法格式如下: IF(expr1,expr2,expr3)
这个函数有3个参数,第一个是要被判断的表达式,如果表达式为真,IF()将会返回第二个参数;如果为假,IF()将会返回第三个参数。
例: 判断2*4是否大于9–5,是则返回“是”,否则返回“否”。
SELECTIF(2*4>9–5, '是', '否'); 结果为:是;
例:返回XS表名字为两个字的学生姓名、性别和专业名。性别值如为0则显示为“女”,为1则显示为“男”。
SELECT 姓名, IF(性别=0, '女', '男') AS 性别, 专业名
FROMXS WHERE 姓名LIKE '__';
7. 格式化函数
MySQL还有一些函数是特意为格式化数据设计的。
(1)FORMAT()函数
语法格式为: format(x, y)
FORMAT()函数把数值格式化为以逗号间隔的数字序列。FORMAT()的第一个参数x是被格式化的数据,第二个参数y是结果的小数位数。
例如: SELECT FORMAT(111111.23654,2), FORMAT(-5468,4);
结果为:111111.23,-5468.0000;
(2)DATE_FORMAT()和TIME_FORMAT()函数
用来格式化日期和时间值。语法格式如下:
DATE_FORMAT/TIME_FORMAT(date | time, fmt)
其中,date和time是需要格式化的日期和时间值,fmt是日期和时间值格式化的形式,下表列出了MySQL中的日期/时间格式化代码。
关 键 字
间隔值的格式
关 键 字
间隔值的格式
%a
缩写的星期名(Sun,Mon…)
%p
AM或PM
%b
缩写的月份名(Jan,Feb…)
%r
时间,12小时的格式
%d
月份中的天数
%S
秒(00,01)
%H
小时(01,02…)
%T
时间,24小时的格式
%I
分钟(00,01…)
%w
一周中的天数(0,1)
%j
一年中的天数(001,002…)
%W
长型星期的名字(Sunday,Monday…)
月份,2位(00,01…)
%Y
年份,4位
%M
长型月份的名字(January,February)
举例:SELECT DATE_FORMAT(NOW(), '%W,%d,%M,%Y %r');
注意:这两个函数是对大小写敏感的。
(3)INET_NTOA()和INET_ATON()函数
MySQL中的inet_ntoa()和inet_aton()函数可以分别把IP地址转换为数字或者进行相反的操作。如下面的例子所示:
SELECTINET_ATON('192.168.1.1');
8. 类型转换函数
MySQL提供cast()函数进行数据类型转换,它可以把一个值转换为指定的数据类型。
语法格式: CAST(expr, AS type)
expr是CAST函数要转换的值,type是转换后的数据类型。
在CAST函数中MySQL支持这几种数据类型:BINARY、CHAR、DATE、TIME、DATETIME、SIGNED和UNSIGNED。
通常情况下,当使用数值操作时,字符串会自动地转换为数字,因此下面例子中两种操作得到相同的结果:
SELECT1+'99', 1+CAST('99' AS SIGNED);
字符串可以指定为binary类型,这样它们的比较操作就成为大小写敏感的。使用CAST()函数指定一个字符串为BINARY和字符串前面使用BINARY关键词具有相同的作用。
例: 执行如下语句:
SELECT'a'=BINARY 'A', 'a'=CAST('A' AS BINARY);
结果为:0,0;(两个表达式的结果都为零表示两个表达式都为假)
MySQL还可以强制将日期和时间函数的值作为一个数而不是字符串输出。
例: 将当前日期显示成数值形式。
SELECTCAST(CURDATE() AS SIGNED);
9. 系统信息函数
MySQL还具有一些特殊的函数用来获得系统本身的信息,下表列出了大部分信息函数。
函 数
功 能
DATABASE()
返回当前数据库名
benchmark(n,expr)
将表达式expr重复运行n次
charsetstr)
返回字符串str的字符集
Connection_id()
返回当前客户的连接ID
FOUND_ROWS()
将最后一个SELECT查询(没有以LIMIT语句进行限制)返回的记录行数返回
GET_LOCK(str,dur)
获得一个由字符串str命名的并且有dur秒延时的锁定
IS_FREE_LOCK(str)
检查以str命名的锁定是否释放
LAST_INSERT_ID()
返回由系统自动产生的最后一个AUTOINCREMENT ID的值
master_pos_wait(log,pos,dur)
锁定主服务器dur秒直到从服务器与主服务器的日志log指定的位置pos同步
please_lock(str)
释放由字符串str命名的锁定
USER()或SYSTEM_USER()