- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是 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 表达式被无意地放入查询中。
选择本身有效。当与插入语句结合使用时,它不起作用。内部选择旨在显示创建的临时表在被检查的列中可以有空值。
通过将 IF 替换为 IFNULL(a.testool, ''),问题已“修复”
其他一些替换也失败了(而选择本身有效):
1 IF (a.testcol, '', a.testcol)
2 IF (a.testcol, '', '')
3 IF ('', '', '')
其他版本的MySQL是否存在此错误?
编辑 -- 使用 select 的查询结果:
消息:错误代码:1292。截断了不正确的 INTEGER 值:''
它应该得到的结果是两个“测试”字符串被输入到 zztest 表中。
编辑 -- 我在大约 2 小时后再次尝试。最后两个语句“有效”(记住将它们插入上面的查询中......)。第一个替换语句失败。然后 2 号和 3 号再次失败。
所以看起来语句 1 是罪魁祸首(原来的,它现在出错了......)。可能存在某种不良状态,其中产生相同中间结果的语句也失败了。
那么接下来的问题是——有没有办法确保查询被重置?
就在我尝试在新连接中执行查询后,Workbench 崩溃了。相关吗?
编辑——发现显式转换有效:
IF (a.testcol, cast('' as char), cast('' as char))
所以我找到了解决方法。问题是——为什么 ''(引号内的任何内容)被解释为 INTEGER?我什至通过连接 '' 将其解释为 DOUBLE。
为什么它有时有效,而其他的却无效? <-- 这部分最糟糕。
最佳答案
这个:
IF(a.testcol IS NULL,'',a.testcol)
永远不会变成null,你的条件:
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
仅在参数为 null 时返回“true”。
关于mysql - IF(a.testcol IS NULL ,'' ,a.testcol) IS NOT NULL 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14964921/
这是 MySQL (5.1.41-community) 中的错误 -- CREATE TEMPORARY TABLE zztest (stuff varchar(20) NULL) INSERT IN
我是一名优秀的程序员,十分优秀!