检查字段是否为空

时间:2011-04-02 01:27:39

标签: mysql

如果我想检查字段是否包含除null和其他字符以外的其他字符,那么查询是否正确?

select CASE WHEN description IS NULL THEN 'null'
  WHEN description IS NOT NULL THEN 'not null' ELSE 'something else' END 
  AS 'description'from milestone where name like '%Test%' or name like '%test%';

+-------------+
| description |
+-------------+
| not null    |
+-------------+
1 row in set (0.00 sec)

6 个答案:

答案 0 :(得分:19)

Null和empty表示NULL +''(空字符串)?

select CASE WHEN description IS NULL or description = '' THEN 'null or empty'
  ELSE 'not null' END 
  AS 'description'

在原始查询中,不存在第三种情况,因为IS NULL和IS NOT NULL是互补的,它们之间已经涵盖了所有可能性。

此外,除非你使用区分大小写的排序规则(非常罕见,除非你特别提名,否则永远不会默认排序),MySQL不是Oracle - 这两个查询的工作原理相同:

where name like '%Test%' or name like '%test%'
where name like '%test%'

因为MySQL会不区分大小写匹配字符串

答案 1 :(得分:14)

简单的IF解决方案:

IF (my_field = '', "not null", "null")

顺便说一下,我个人喜欢这样使用它(简写语法):

IF (my_field = '', 1, 0)

答案 2 :(得分:4)

也许你可以尝试这样的事情:

select IF(LENGTH(description) > 0,'not null', 'null or empty') from milestone

答案 3 :(得分:0)

您也可以尝试使用 REGEXP

// 0 is considered empty
WHERE `field` [NOT] REGEXP '[^0]'

// 0 is not considered empty
WHERE `field` [NOT] REGEXP '[^.]'

答案 4 :(得分:0)

我会创建一个“存储函数”(在MSSQL中称为用户定义函数):

CREATE FUNCTION isNullOrSpaces(s TEXT)
RETURNS BOOLEAN DETERMINISTIC
RETURN (IFNULL(LENGTH(TRIM(s)), 0) = 0);

select 
    isNullOrSpaces(null) 'null', 
    isNullOrSpaces('') 'empty string', 
    isNullOrSpaces('   ') 'spaces',
    isNullOrSpaces('  
        ') 'spaces, tab and newline';

请注意,最后一种情况 - 值包含制表符和换行符 - 返回0(FALSE)。这要归功于内置TRIM函数的错误实现(IMHO),它不会删除所有空格。

我本来希望使用函数isNullOrWhiteSpace,但由于这对于很多情况来说已经足够好了,并且正确的TRIM函数的纯SQL实现会很慢,我想这会做。如果你需要处理所有空格,可以考虑将MySQL调用为用户定义的函数(本机函数是一个更好的名称IMO) - 参见例如https://www.codeproject.com/articles/15643/mysql-user-defined-functions

如果参数为NULL,空或空格,您可能还希望创建一个返回空字符串的版本。这个版本主要用于查询的WHERE或HAVING子句,但除了返回空字符串或原始字符串之外,使其中一个工作相同的唯一困难部分是正确命名函数。像这样:

CREATE FUNCTION trimEx(s TEXT)
RETURNS TEXT DETERMINISTIC
RETURN IF(IFNULL(LENGTH(TRIM(s)), 0) = 0, '', TRIM(s));

select 
    trimEx(null) 'null',    
    trimEx('') 'empty string',  
    trimEx('   ') 'spaces', 
    trimEx('  not empty  ') 'contains text';

答案 5 :(得分:-3)

// checks if the field not null
where field_name !=' '