同PHP等程序设计语言一样,MySQL也有许多DBMS都有自己的数据类型(即列类型),运算符、语句结构、关键字以及函数。其中广泛用于SELECT和WHERE子句中的函数,对程序员简化查询语句的构造,提高查询计算的效率,起着非常重要的作用。这些函数将一些复杂的查询计算操作用函数封装起来,由MySQL自己执行计算,仅将结果返回给PHP。
这些函数,涵盖了数学运算,字符串处理,逻辑运算,日期时间运算,比较运算,语句流程控制,分组汇总,排序等许多方面的处理,下面介绍常用到的一些函数。
为简便起见,用-表示执行查询后MySQL返回的结果。
强制运算
小括号()。使用它们来强制在一个表达式的计算顺序。
mysqlselect1+*;-7mysqlselect(1+)*;-9
算术运算
+加法
mysqlselect+5;-8
以此类推可以有以下的计算法:
-减法*乘法/除法
被零除产生一个NULL结果:
mysqlselect10/(1-1);-NULL
逻辑运算
所有的逻辑函数返回1(TRUE)或0(FALSE)。NULL被认为是假值。
NOT(!)逻辑非OR(
)逻辑或AND()逻辑与
比较运算符
比较操作得出值1(TRUE)、0(FALSE)或NULL等结果。这些函数工作运用在数字和字符串上。
=等于不等于!=不等于=小于或等于小于=大于或等于大于
mysqlselect;-0
ISNULL是否为空ISNOTNULL是否不为空
mysqlselect1ISNULL,0ISNULL,NULLISNULL:-
exprBETWEENminANDmax
如果expr对大于或等于min且expr是小于或等于max,BETWEEN返回1,否则它返回0。
mysqlselect1BETWEENAND;-0mysqlselectBETWEENAND;-1
exprIN(value,...)
如果expr是在IN表中的任何值,返回1,否则返回0。如果所有的值是常数,那么所有的值根据expr类型被计算和排序,然后项目的搜索是用二进制的搜索完成。这意味着如果IN值表全部由常数组成,IN是很快的。如果expr是一个大小写敏感的字符串表达式,字符串比较以大小写敏感方式执行。
mysqlselectIN(0,,5,wefwf);-0mysqlselectwefwfIN(0,,5,wefwf);-1
exprNOTIN(value,...)
与NOT(exprIN(value,...))相同。
ISNULL(expr)
如果expr是NULL,ISNULL()返回1,否则它返回0。
mysqlselectISNULL(1+1);-0mysqlselectISNULL(1/0);-1
注意,使用=的NULL的值比较总为假!
字符串比较函数
通常,如果在字符串比较中的任何表达式是区分大小写的,比较以大小写敏感的方式执行。
exprLIKEpattern[ESCAPEescape-char]
将expr与模式字符串pattern进行模式匹配。返回1(TRUE)或0(FALSE)。用LIKE,你可以在模式中使用下列个
%匹配任何数目的字符,甚至零个字符_精确匹配一个字符
mysqlselectDavid!LIKEDavid_;-1mysqlselectDavid!LIKE%D%v%;-1
为了测试一个通配符的文字实例,用转义字符的加在字符前面。如果你不指定ESCAPE字符,假定为“\”:
\%匹配%字符\_匹配_字符
mysqlselectDavid!LIKEDavid\_;-0mysqlselectDavid_LIKEDavid\_;-1
为了指定一个不同的转义字符,使用ESCAPE子句:
mysqlselectDavid_LIKEDavid
_ESCAPE
;-1
LIKE允许用在数字的表达式上!(这是MySQL对ANSISQLLIKE的一个扩充。)
mysqlselect10LIKE1%;-1
exprNOTLIKEpattern[ESCAPEescape-char]
与NOT(exprLIKEpattern[ESCAPEescape-char])相同。
控制流函数
IF(expr1,expr,expr)
如果expr1是TRUE(expr10且expr1NULL),那么IF()返回expr,否则它返回expr。IF()返回一个数字或字符串值,取决于它被使用的上下文。
mysqlselectIF(1,,);-mysqlselectIF(1,yes,no);-yesmysqlselectIF(strcmp(test,test1),yes,no);-no
expr1作为整数值被计算,它意味着如果你正在测试浮点或字符串值,应该使用一个比较操作来做。
mysqlselectIF(0.1,1,0);-0mysqlselectIF(0.10,1,0);-1
在上面的第一种情况中,IF(0.1)返回0,因为0.1被变换到整数值,导致测试IF(0)。这可能不是你期望的。在第二种情况中,比较测试原来的浮点值看它是否是非零,比较的结果被用作一个整数。
CASEvalueWHEN[