浅用mysql比较函数

来源:互联网 发布:java collection用法 编辑:程序博客网 时间:2024/05/14 08:56

今天在操作数据库时,遇到一个问题:修改表中某条数据,比较某个字段原有值和修改值,如果原有值大于修改值,则这个字段不修改,从而引出了是用mysql的比较函数;

举个例子,我现在有一个users表,其中字段分别为id,name,age,sex,id是key。

表中原有数据如下:

 

+----+------+------+------+

| id | name | age  | sex  |

+----+------+------+------+

| 16 | yang | 5      | s     |

| 17 | hang | 4      | m    |

我想修改id=16的用户的年龄,如果要现今age的值是大于插入数据的值,则不修改。这时我们可以使用mysql的比较函数greatest函数,sql语句为:“ update users set age=greatest(age,10) where id=16”,修改后数据表如下:

 

+----+------+------+------+

| id | name | age  | sex  |

+----+------+------+------+

| 16 | yang | 10   | s    |

| 17 | hang | 4    | m    |

如果使用on duplicate key update也是能执行的。如 insert into users (id,name,age,sex)  values(16,'tang',12,sex='f') on duplicate key update name='tang',age=greatest(age,16),sex='f';

这句语句是向表中插入数据,如果已存在此key,则修改这条数据(on duplicate key update的用法),执行结果如下:

+----+------+------+------+

| id | name | age  | sex  |

 

| 16 | tang | 16   | f      |

| 17 | hang | 4    | m    |

 

 

同理select中也是可以用的。此外比较函数还有least。

来自mysql文档中的说明:

GREATEST(value1,value2,...)当有2或多个参数时,返回值为最大(最大值的)参数

 

LEAST(value1,value2,...)

在有两个或多个参数的情况下, 返回值为最小 (最小值) 参数

用一下规则将自变量进行对比:

  •  
    • 假如返回值被用在一个 INTEGER 语境中,或是所有参数均为整数值,则将其作为整数值进行比较。
    • 假如返回值被用在一个 REAL语境中,或所有参数均为实值,则 将其作为实值进行比较。
    • 假如任意一个参数是一个区分大小写的字符串,则将参数按照区分大小写的字符串进行比较。
    • 在其它情况下,将参数作为区分大小写的字符串进行比较。

假如任意一个自变量为NULL,则GREATEST()和 LEAST()的返回值为NULL 

 

mysql> SELECT LEAST(2,0);

        -> 0

mysql> SELECT LEAST(34.0,3.0,5.0,767.0);

        -> 3.0

mysql> SELECT LEAST('B','A','C');

        -> 'A'

 

 

暂时用到这么多,后面用上继续补上。

原创粉丝点击