今天在操作数据库时,遇到一个问题:修改表中某条数据,比较某个字段原有值和修改值,如果原有值大于修改值,则这个字段不修改,从而引出了是用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'
暂时用到这么多,后面用上继续补上。
分享到:
2011-09-28 00:34
浏览 615
分类:数据库
评论