IF(a.testcol IS NULL,'',a.testcol) IS NOT NULL 不起作用
Posted
技术标签:
【中文标题】IF(a.testcol IS NULL,\'\',a.testcol) IS NOT NULL 不起作用【英文标题】:IF(a.testcol IS NULL,'',a.testcol) IS NOT NULL doesn't workIF(a.testcol IS NULL,'',a.testcol) IS NOT NULL 不起作用 【发布时间】:2013-02-04 13:45:05 【问题描述】:这是 mysql (5.1.41-community) 中的错误吗--
CREATE TEMPORARY TABLE zztest (stuff varchar(20) NULL)
INSERT INTO zztest
SELECT
'test'
FROM (
select '1' as testcol
union
select null
) a
WHERE **IF(a.testcol IS NULL,'',a.testcol)** IS NOT NULL
这是一个简化的查询。 ** 之间的 IF 表达式应该是粗体的。它来自动态查询,其中 IF 表达式被无辜地放入查询中。
选择本身有效。当与插入语句结合使用时,它不起作用。内部选择旨在显示创建的临时表在被检查的列中可以有空值。
通过用 IFNULL(a.testtool, '') 替换 IF 来“修复”该问题
其他一些替换也失败了(而选择本身有效):
1 IF (a.testcol, '', a.testcol)
2 IF (a.testcol, '', '')
3 IF ('', '', '')
其他版本的 MySQL 是否存在这个 bug?
Edit -- 使用 select 的查询结果:
消息:错误代码:1292。截断不正确的 INTEGER 值:''
它应该有的结果是两个'test'字符串被输入到zztest表中。
编辑——我在大约 2 小时后再次尝试。最后两个语句“有效”(记住将它们插入上面的查询中......)。第一个替换语句失败。然后数字 2 和 3 又失败了。
所以看起来语句 1 是罪魁祸首(原来的,它现在出错了..)。也许存在某种不良状态,产生相同中间结果的语句也会失败。
那么接下来的问题是——有没有办法确保查询被重置?
就在我尝试在新连接中执行查询之后,工作台崩溃了..相关吗?
edit -- 发现显式转换有效:
IF (a.testcol, cast('' as char), cast('' as char))
所以我找到了解决方法。问题是——为什么''(引号内有任何内容)会被解释为整数?我什至通过连接 '' 将其解释为 DOUBLE。
为什么它有时会起作用,而其他时候却不起作用?
【问题讨论】:
怎么不行?会发生什么,应该发生什么? 【参考方案1】:这个:
IF(a.testcol IS NULL,'',a.testcol)
永远不会为空,你的条件:
WHERE IF(a.testcol IS NULL,'',a.testcol) IS NOT NULL
将始终返回所有行。
当 testcol 为 null 时,您为其分配空字符串:''
空字符串与 NULL
不同,这不是错误。
你应该使用这样的东西:
SELECT testcol FROM
(
SELECT '1' AS testcol
UNION
SELECT null
) a
WHERE IF(a.testcol IS NULL, NULL ,a.testcol) IS NOT NULL
或:
SELECT testcol FROM
(
SELECT '1' AS testcol
UNION
SELECT null
) a
WHERE ISNULL(a.testcol) = true
ISNULL
只在参数为空时返回“true”。
【讨论】:
ISNULL(a.testcol) = true
不是 MySQL……是吗?你就不能WHERE a.testcol IS NULL
吗?
@RocketHazmat ISNULL 在 MySQL 中工作,你可以只使用 IS NULL,但我想告诉他为什么他的 IF 不起作用,我不知道他想如何使用它(我假设他向我们展示了非常简化的代码)。
我不知道ISNULL
。但那不是WHERE ISNULL(a.testcol)
吗?我不认为 MySQL 有 true
/false
关键字。
@RocketHazmat TRUE 和 FALSE 是 1 和 0 的同义词。更多信息在这里:***.com/questions/10852337/true-false-vs-0-1-in-mysql
酷!我不知道。 :-)以上是关于IF(a.testcol IS NULL,'',a.testcol) IS NOT NULL 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Hibernate Criteria, createAlias() If Alias is Null
PAT A1135 Is It A Red Black Tree
Is there a standard function to check for null, undefined, or blank variables in JavaScript?
在 Oracle PL/SQL 的触发器中扩展变量(IF :new.variable_name IS NULL THEN