这是在MySQL(5.1.41 - 社区)中的错误 -IF(a.testcol IS NULL, '',a.testcol)IS NOT NULL不起作用
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代替IF(a.testool, '')
其他一些replacesments失败过(而自己的选择工作) “固定”:
1 IF (a.testcol, '', a.testcol)
2 IF (a.testcol, '', '')
3 IF ('', '', '')
这个错误是否存在于其他版本的MySQL中?
编辑 - 与选择查询的结果:
消息:错误代码:1292截断不正确INTEGER值:“”
它应该具有的结果是两个“测试”字符串输入到zztest表中。
编辑 - 约2小时后我再次尝试了。最后两条语句“工作”(记住将它们插入上面的查询中)。第一个替换声明失败。然后数字2和三再次失败。
因此,它看起来像语句1是罪魁祸首(和原来的,它错误了现在..)..也许某种坏的状态存在的地方,产生相同中间结果的语句也失败。
因此,后续问题是 - 有没有办法确保查询被重置?
就在我尝试在新连接中执行查询后,工作台崩溃了..相关?
编辑 - 发现,有明确的转换工作:
IF (a.testcol, cast('' as char), cast('' as char))
所以我发现我周围的路。问题是 - 为什么“(将引号内的任何内容)解释为INTEGER?我甚至通过连接''将它解释为DOUBLE。
它为什么有时会工作,而不是其他人? < - 这部分吸吮的女仆。
它不起作用?会发生什么,会发生什么? – nos 2013-02-19 18:53:11