2015-10-16 39 views
4

为什么此语句返回0而不是空字符串?我实际上使用一个视图,选择包含硬编码列的语句返回NULL。当我试图检查其一个NULL,它实际上返回0ISNULL为NULL值的硬编码列返回0

SELECT ISNULL((SELECT NULL as Col), '') 

任何建议或帮助,将不胜感激......

snapshot

+0

mySQL的新功能。我有同样的问题有: 'IFNULL(FNAME, '')+ '' + IFNULL(L-NAME, '')Name' 我用: 'CONCAT(IFNULL(FNAME, ''), '' ,ifnull(lname,''))Name' 它的工作,以防其他人碰到相同的事情。 –

回答

5

NULL没有一个明确的类型,但在普通的SELECT NULL中,它返回为类型int。如果您的表达式涉及intchar(N),int获胜,则char(N)值将转换为int,而不是相反。为了让事情更加令人困惑,''碰巧可以转换为int没有任何问题,并且转换的结果是0

SELECT ISNULL((SELECT CAST(NULL AS char(1)) AS col), '')应该返回一个空字符串。

+0

感谢当我们运行普通的'SELECT NULL'为什么它返回'NULL' – wiretext

+0

@tinka你还希望它返回什么? – hvd

+0

当我们运行SELECT ISNULL((SELECT NULL),'')'它返回'0'时,我们有困惑,那么当我们单独运行时,同样的内部查询'SELECT NULL'它返回NULL' – wiretext