MySQL按照以下规则进行数值比较:
- 若有一个或两个参数为 NULL,除非NULL-safe <=> 等算符,则比较运算的结果为NULL。
- 若同一个比较运算中的两个参数都是字符串,则按照字符串进行比较。
- 若两个参数均为整数,则按照整数进行比较。
- 十六进制值在不需要作为数字进行比较时,则按照二进制字符串进行处理。
- 假如参数中的一个为 TIMESTAMP 或 DATETIME 列,而其它参数均为常数, 则在进行比较前将常数转为 timestamp。这样做的目的是为了使ODBC的进行更加顺利。注意,这不适合IN()中的参数!为了更加可靠,在进行对比时通常使用完整的 datetime/date/time字符串。
- 在其它情况下,参数作为浮点数进行比较。
在默认状态下,字符串比较不区分大小写,并使用现有字符集(默认为cp1252 Latin1,同时对英语也适合)。
为了进行比较,可使用CAST()函数将某个值转为另外一种类型。 使用CONVERT()将字符串值转为不同的字符集。
二、部分函数
1、COALESCE(value,...)
返回值为列表当中的第一个非 NULL值,在没有非NULL 值得情况下返回值为 NULL。
2、GREATEST(value1,value2,...)
当有2或多个参数时,返回值为最大(最大值的)参数。比较参数所依据的规律同LEAST()相同。
3、expr IN (value,...)
若expr 为IN列表中的任意一个值,则其返回值为 1 ,否则返回值为0。假如所有的值都是常数,则其计算和分类根据expr的类型进行。这时,使用二分搜索来搜索信息。如IN值列表全部由常数组成,则意味着IN的速度非常之快。如expr是一个区分大小写的字符串表达式,则字符串比较也按照区分大小写的方式进行。
IN 列表中所列值的个数仅受限于 max_allowed_packet 值。
为了同SQL 标准相一致,在左侧表达式为NULL的情况下,或是表中找不到匹配项或是表中一个表达式为NULL的情况下,IN的返回值均为NULL。
4、ISNULL(expr)
如expr 为NULL,那么ISNULL()的返回值为 1,否则返回值为 0
5、INTERVAL(N,N1,N2,N3,...)
假如N < N1,则返回值为0;假如N <N2等等,则返回值为1;假如N 为NULL,则返回值为 -1。所有的参数均按照整数处理。为了这个函数的正确运行,必须满足N1 <N2 < N3 < ……< Nn 。其原因是使用了二分查找(极快速)。
example: mysql> SELECT INTERVAL(23, 1, 15, 17, 30, 44, 200); 查询结果为: 3
6、 LEAST(value1,value2,...)
在有两个或多个参数的情况下, 返回值为最小 (最小值) 参数。用一下规则将自变量进行对比:
- 假如返回值被用在一个 INTEGER 语境中,或是所有参数均为整数值,则将其作为整数值进行比较。
- 假如返回值被用在一个 REAL语境中,或所有参数均为实值,则 将其作为实值进行比较。
- 假如任意一个参数是一个区分大小写的字符串,则将参数按照区分大小写的字符串进行比较。
- 在其它情况下,将参数作为区分大小写的字符串进行比较。
假如任意一个自变量为NULL,则 LEAST()的返回值为NULL 。