10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 本手册下载 本手册摘录

12.4.2比较函数和操作符

表12.4比较运算符

的名字 描述
> 大于操作符
>= 大于等于运算符
< 小于操作符
<>! = 不等于操作符
<= 小于等于运算符
< = > 空安全的等于操作符
相等操作符
之间……和… 值是否在一个值范围内
合并() 返回第一个非null参数
最大的() 返回最大参数
在() 一个值是否在一组值中
时间间隔() 返回小于第一个参数的参数的索引
对一个布尔值进行测试
不是 对一个布尔值进行测试
不是零 NOT NULL值测试
为空 NULL值测试
ISNULL () 测试参数是否为NULL
至少() 返回最小参数
就像 简单的模式匹配
不是之间……和… 值是否不在一个值范围内
不() 一个值是否不在一组值中
不喜欢 简单模式匹配的否定
STRCMP () 比较两个字符串

比较操作的结果是1真正的),0),或.这些操作对数字和字符串都有效。字符串会自动转换为数字,数字也会根据需要自动转换为字符串。

以下关系比较操作符不仅可以用于比较标量操作数,还可以用于比较行操作数:

= > <> = <= <> !=

本节后面对这些操作符的描述详细介绍了它们如何处理行操作数。有关行子查询上下文中的行比较的其他示例,请参见第13.2.11.5节,“行子查询”

本节中的一些函数返回的值不是1真正的),0),或至少()最大的()是这些函数的例子;第12.3节,“表达式求值中的类型转换”,描述由这些函数和类似函数执行的用于确定其返回值的比较操作的规则。

请注意

在MySQL的早期版本中,当计算包含至少()最大的(),服务器试图猜测使用该函数的上下文,并将函数的参数强制为整个表达式的数据类型。例如,参数(“十一”、“45”、“2”)作为字符串计算和排序,因此这个表达式返回“十一”.在MySQL 8.0.3和更早的版本中,当求值表达式时最小值("11","45","2")+ 0,服务器在对参数进行排序之前将它们转换为整数(预计将整数0加到结果中),从而返回2。

从MySQL 8.0.4开始,服务器不再尝试以这种方式推断上下文。相反,函数使用提供的参数执行,当且仅当一个或多个参数的类型不完全相同时,执行到它们的数据类型转换。使用返回值的表达式所要求的任何类型强制现在都在函数执行之后执行。这意味着,在MySQl 8.0.4及更高版本中,最小值("11","45","2")+ 0计算结果为“十一”+ 0因此取整数11。(Bug #83895, Bug #25123839)

要将值转换为特定类型以进行比较,可以使用把()函数。字符串值可以转换为不同的字符集使用将().看到第12.11节,“转换函数和操作符”

默认情况下,字符串比较不区分大小写,使用当前字符集。默认值是utf8mb4

  • 平等:

    mysql> SELECT 1 = 0;-> 0 mysql> SELECT '0' = 0;-> 1 mysql> SELECT '0.0' = 0;-> 1 mysql> SELECT '0.01' = 0;-> 0 mysql> SELECT '。01 ' = 0.01;- > 1

    行比较,(a, b) = (x, y)等价于:

    (a = x) AND (b = y)
  • < = >

    安全的平等。的相等比较运营商,但回报1而不是如果两个操作数都是,0而不是如果一个操作数是

    < = >操作符相当于标准SQL不是截然不同的操作符。

    mysql> SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;mysql> SELECT 1 = 1, NULL = NULL, 1 = NULL;-> 1, null, null

    行比较,(a, b) <=> (x, y)等价于:

    (a <= x) AND (b <= y)
  • <>! =

    不等于:

    mysql >选择”。01”< >“0.01”;-> 1 mysql> SELECT .01 <> '0.01';-> 0 mysql> SELECT 'zapp' <> 'zapp';- > 1

    行比较,(a, b) <> (x, y)(a, b) != (x, y)是等价的:

    (a <> x) OR (b <> y)
  • <=

    小于或等于:

    mysql> SELECT 0.1 <= 2;- > 1

    行比较,(a, b) <= (x, y)等价于:

    (a < x) OR (a = x) AND (b <= y))
  • <

    不足:

    mysql> SELECT 2 < 2;- > 0

    行比较,(a, b) < (x, y)等价于:

    (a < x) OR (a = x) AND (b < y))
  • >=

    大于或等于的:

    mysql> SELECT 2 >= 2;- > 1

    行比较,(a, b) >= (x, y)等价于:

    OR (a = x) AND (b = y)
  • >

    比:

    mysql> SELECT 2 > 2;- > 0

    行比较,(a, b) (x, y)等价于:

    OR (a = x) AND (b > y))
  • expr之间的最小值马克斯

    如果expr是大于还是等于最小值expr是小于还是等于马克斯之间的返回1,否则返回0.这个等价于这个表达式最小值<=exprexpr<=马克斯如果所有参数都是相同类型的。否则,将根据中描述的规则进行类型转换第12.3节,“表达式求值中的类型转换”,但适用于所有三个论点。

    mysql> SELECT 2 from 1 AND 3, 2 from 3 AND 1;mysql> SELECT 1 BETWEEN 2 AND 3;-> 0 mysql> SELECT 'b' BETWEEN 'a' AND 'c';-> 1 mysql> SELECT 2 BETWEEN 2 AND 3;-> 1 mysql> SELECT 2 BETWEEN 2 AND 'x-3'- > 0

    以达到最佳使用效果之间的对于日期或时间值,使用把()将值显式转换为所需的数据类型。例子:如果你比较DATETIME两个日期值,转换日期DATETIME值。如果您使用字符串常量,如“2001-1-1”与…相比日期,将字符串转换为日期

  • expr之间的不最小值马克斯

    这个等于(expr之间的最小值马克斯

  • 合并(价值,……)

    返回第一个非-值,或如果没有non-值。

    的返回类型合并()参数类型的聚合类型。

    mysql >选择合并(NULL, 1);-> 1 mysql> SELECT COALESCE(NULL,NULL,NULL);- >零
  • 最大的(value1value2,……)

    如果有两个或多个参数,则返回最大(最大值)参数。参数比较使用与for相同的规则至少()

    mysql >选择最大(2,0);-> 2 mysql> SELECT GREATEST(34.0,3.0,5.0,767.0);-> 767.0 mysql> SELECT GREATEST('B','A','C');- - - - - - >“C”

    最大的()返回如果有任何争论

  • expr在(价值,……)

    返回1(真正的)如果expr等于其中的任何值在()列表,否则返回0(假)。

    类型转换根据中描述的规则进行第12.3节,“表达式求值中的类型转换”,适用于所有的论点。类中的值不需要类型转换在()名单上,他们都是非JSON相同类型的常量,和expr可以将它们作为相同类型的值进行比较(可能在类型转换之后),则会发生优化。对列表中的值进行排序和搜索expr是用二分法完成的,这就产生了在()操作非常快。

    mysql> SELECT 2 IN (0,3,5,7);- > 0 mysql >选择“wefwf”(“小”、“wefwf”,“其”);- > 1

    在()可以用于比较行构造函数:

    mysql> SELECT (3,4) IN ((1,2), (3,4));- mysql> SELECT (3,4) IN ((1,2), (3,5));- > 0

    控件中不应该混合使用引号和非引号的值在()列表,因为带引号的值(如字符串)和未带引号的值(如数字)的比较规则不同。因此,混合类型可能导致不一致的结果。例如,不要写在()表达式如下:

    SELECT val1 FROM tbl1 WHERE val1 IN (1,2,'a');

    相反,你可以这样写:

    SELECT val1 FROM tbl1 WHERE val1 IN ('1','2','a');

    隐式类型转换可能产生非直观的结果:

    mysql> SELECT 'a' IN (0), 0 IN ('b');- > 1, 1

    在这两种情况下,比较值都转换为浮点值,每种情况下产生0.0,比较结果为1 (true)。

    中值的个数在()列表仅受max_allowed_packet价值。

    为了符合SQL标准,在()返回不仅仅是如果左边的表达式是,但如果在列表中没有找到匹配,且列表中的一个表达式是

    在()语法还可以用于编写某些类型的子查询。看到第13.2.11.3节," ANY、IN或SOME子查询"

  • expr不是在(价值,……)

    这个等于(expr在(价值,……)

  • 时间间隔(NN1N2N3,……)

    返回0如果N<N11如果N<N2等等-1如果N.所有参数都被视为整数。它要求N1<N2<N3<...<神经网络让这个函数正常工作。这是因为使用了二分搜索(非常快)。

    mysql> SELECT INTERVAL(23, 1, 15, 17, 30, 44, 200);-> 3 mysql> SELECT INTERVAL(10,10,100, 1000);-> 2 mysql> SELECT INTERVAL(22, 23, 30, 44, 200);- > 0
  • boolean_value

    用布尔值测试值,其中boolean_value可以真正的,或未知的

    mysql> SELECT 1为真,0为假,NULL为未知;-> 1,1,1
  • 不是boolean_value

    用布尔值测试值,其中boolean_value可以真正的,或未知的

    mysql> SELECT 1 IS NOT UNKNOWN, 0 IS NOT UNKNOWN, NULL IS NOT UNKNOWN;-> 1,1,0
  • 为空

    测试值是否为

    mysql> SELECT 1 IS NULL, 0 IS NULL, NULL IS NULL;-> 0 0 1

    为了更好地使用ODBC程序,MySQL在使用时支持以下额外特性为空

  • 不是零

    测试值是否为空值

    mysql> SELECT 1 IS NOT NULL, 0 IS NOT NULL, NULL IS NOT NULL;-> 1,1,0
  • ISNULL (expr

    如果exprISNULL ()返回1,否则返回0

    mysql >选择ISNULL (1 + 1);-> 0 mysql> SELECT ISNULL(1/0)- > 1

    ISNULL ()可以用来代替测试一个值是否为.(将一个值与使用总收益.)

    ISNULL ()函数与为空比较运算符。详见为空

  • 至少(value1value2,……)

    如果有两个或多个参数,则返回最小(最小值)参数。参数比较的规则如下:

    • 如果有任何争论,结果是.不需要比较。

    • 如果所有参数都是整型值,则将它们作为整数进行比较。

    • 如果至少有一个参数是双精度的,则将它们作为双精度值进行比较。否则,如果至少有一个参数是小数值,它们比较为小数值。

    • 如果参数由数字和字符串组成,则将它们作为字符串进行比较。

    • 如果任何参数是非二进制(字符)字符串,则将参数作为非二进制字符串进行比较。

    • 在所有其他情况下,将参数作为二进制字符串进行比较。

    的返回类型至少()比较参数类型的聚合类型。

    mysql >选择至少(2,0);-> 0 mysql> SELECT LEAST(34.0,3.0,5.0,767.0);-> 3.0 mysql> SELECT LEAST('B','A','C');- - - - - - >“A”