mysqlselectif语句


如何在SELECT语句中加上IF判断

例:select *,if(sva=1,”男”,”女”) as ssva from tableame where id =1 Quote 控制流程函数 CASE value WHEN [comparevalue] THEN result [WHEN [comparevalue] THEN result 。

] [ELSE result] END CASE WHEN [condition] THEN result [WHEN [condition] THEN result 。] [ELSE result] END 在第一个方案的返回结果中, value=comparevalue。

而第二个方案的返回结果是第一种情况的真实结果。如果没有匹配的结果值,则返回结果为ELSE后的结果,如果没有ELSE 部分,则返回值为 NULL。

sql> SELECT CASE 1 WHEN 1 THEN ‘one’> WHEN 2 THEN ‘two’ ELSE ‘more’ END;> ‘one’ sql> SELECT CASE WHEN 1>0 THEN ‘true’ ELSE ‘false’ END;> ‘true’ sql> SELECT CASE BINARY ‘B’> WHEN ‘a’ THEN 1 WHEN ‘b’ THEN 2 END;> NULL 一个CASE表达式的默认返回值类型是任何返回值的相容集合类型,但具体情况视其所在语境而定。如果用在字符串语境中,则返回结果味字符串。

如果用在数字语境中,则返回结果为十进制值、实值或整数值。 IF(expr1,expr2,expr3) 如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。

IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。sql> SELECT IF(1>2,2,3);> 3 sql> SELECT IF(1<2,'yes ','no');> ‘yes’ sql> SELECT IF(STRCMP(‘test’,’test1′),’no’,’yes’);> ‘no’ 如果expr2 或expr3中只有一个明确是 NULL,则IF() 函数的结果类型 为非NULL表达式的结果类型。

expr1 作为一个整数值进行计算,就是说,假如你正在验证浮点值或字符串值, 那么应该使用比较运算进行检验。 sql> SELECT IF(0.1,1,0);> 0 sql> SELECT IF(0.1<>0,1,0);> 1 在所示的第一个例子中,IF(0.1)的返回值为0,原因是 0.1 被转化为整数值,从而引起一个对 IF(0)的检验。

这或许不是你想要的情况。在第二个例子中,比较检验了原始浮点值,目的是为了了解是否其为非零值。

比较结果使用整数。 IF() (这一点在其被储存到临时表时很重要 ) 的默认返回值类型按照以下方式计算: 表达式 返回值 expr2 或expr3 返回值为一个字符串。

字符串 expr2 或expr3 返回值为一个浮点值。浮点 expr2 或 expr3 返回值为一个整数。

整数 假如expr2 和expr3 都是字符串,且其中任何一个字符串区分大小写,则返回结果是区分大小写。http://** IFNULL(expr1,expr2) 假如expr1 不为 NULL,则 IFNULL() 的返回值为 expr1; 否则其返回值为 expr2。

IFNULL()的返回值是数字或是字符串,具体情况取决于其所使用的语境。 sql> SELECT IFNULL(1,0);> 1 sql> SELECT IFNULL(NULL,10);> 10 sql> SELECT IFNULL(1/0,10);> 10 sql> SELECT IFNULL(1/0,’yes’);> ‘yes’ IFNULL(expr1,expr2)的默认结果值为两个表达式中更加“通用”的一个,顺序为STRING、 REAL或 INTEGER。

假设一个基于表达式的表的情况, 或MySQL必须在内存储器中储存一个临时表中IFNULL()的返回值:CREATE TABLE tmp SELECT IFNULL(1,’test’) AS test;在这个例子中,测试列的类型为 CHAR(4)。NULLIF(expr1,expr2) 如果expr1 = expr2 成立,那么返回值为NULL,否则返回值为 expr1。

这和CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END相同。 sql> SELECT NULLIF(1,1);> NULL sql> SELECT NULLIF(1,2);> 1 注意,如果参数不相等,则 SQL 两次求得的值为 expr1 根据具体问题类型,进行步骤拆解/原因原理分析/内容拓展等。

具体步骤如下:/导致这种情况的原因主要是……。

mysql里面的if语句,到底哪里错了

mysql 里面, 变量不需要加 @ 这个符号的呀

mysql> DELIMITER //

mysql> CREATE PROCEDURE TestIfElse

> (

> p_val INT

> )

> BEGIN

> IF (p_val = 1) THEN

> SELECT ‘1’ AS A;

> ELSEIF (p_val = 2) THEN

> SELECT ‘2’ AS A;

> ELSE

> SELECT ‘other’ AS A;

> END IF;

> END//

Query OK, 0 rows affected (0.05 sec)

mysql> call TestIfElse(1);

> //

++

| A |

++

| 1 |

++

1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql> call TestIfElse(2);

> //

++

| A |

++

| 2 |

++

1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql> call TestIfElse(3);

> //

++

| A |

++

| other |

++

1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql>

mysql 触发器 if 语句 update

@sqlz =’select asd from flkg’; EXECUTE(@sqlz);首先,mysql下动态语句不是这样写的,另外,触发器里不能允许返回结果集的.这里我是希望他能中断更新!你的意思是不是要中断后面的”SET amount =@amountmm WHERE CODE=* AND whcode = * ;”这部分?如果是的话,那这样改下:DELIMITER $$USE `eerp`$$DROP TRIGGER /*!50032 IF EXISTS */ `material_update`$$CREATE TRIGGER `material_update` AFTER UPDATE ON `sf_material` FOR EACH ROW BEGIN IF *ng = ‘Y’ THEN SET @amountmm = (SELECT * FROM warehouse WHERE CODE=* AND whcode = *); IF @amountmm >=0 THEN UPDATE warehouse SET amount =@amountmm WHERE CODE=* AND whcode = * ; END IF ; END IF; END;$$DELIMITER ; &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&”我是要中断更新。

。不是后面。

严格说就是这个表sf_material更新和后面的那个表warehouse更新也一起中断!”因为mysql下触发器内不支持rollback,所以,变换一个方式来处理,如下:那触发器部分这么写(注意:一定要使表TB_error_rollback在你的库中不允许存在):CREATE TRIGGER `material_update` BEFORE UPDATE ON `sf_material` FOR EACH ROW BEGIN IF *ng = ‘Y’ THEN SET @amountmm = (SELECT amount * FROM warehouse WHERE CODE=* AND whcode = *); IF @amountmm <0 THEN update TB_error_rollback set name=1; END IF; UPDATE warehouse SET amount =@amountmm WHERE CODE=* AND whcode = *; END IF;END;。

mysql 使用if……else语句判断当天是否是星期天

两种格式,一种是时间戳,一种是日期格式

SELECT IF(days = 1,”是”,”不是”) as “是否星期天” FROM (SELECT DAYOFWEEK(FROM_UNIXTIME(time,”%Y%m%d”)) AS days FROM table) tmp;

time是时间戳 , days = 1代表星期天

把time 和 table 替换成你数据库的 字段和表

SELECT IF(days = 1,”是”,”不是”) as “是否星期天” FROM (SELECT DAYOFWEEK(date) AS days FROM table) tmp;

date是日期格式 1121 , days = 1代表星期天

把date 和 table 替换成你数据库的 字段和表