代码之家  ›  专栏  ›  技术社区  ›  John Gordon

如何通过单个测试检查空/空/空白值?

  •  69
  • John Gordon  · 技术社区  · 15 年前

    我想编写一个select语句,它只使用一个测试返回没有值的列(空、空或所有空格)。

    我以为这会奏效:

    SELECT column_name from table_name WHERE column_name NOT LIKE '%_%';
    

    但这对空值不起作用。

    我当然可以补充一下

    OR column_name IS NULL
    

    它会起作用,但我想要一种使用单一测试的方法。

    9 回复  |  直到 15 年前
        1
  •  76
  •   Justin Cave    15 年前

    在功能上,您应该能够使用。

    SELECT column_name
      FROM table_name
     WHERE TRIM(column_name) IS NULL
    

    存在的问题是不会使用列名称上的索引。如果这是一个选择性条件,那么您需要有一个基于函数的trim索引(column_name)。

        2
  •  16
  •   GendoIkari    12 年前
    SELECT column_name from table_name
    WHERE RTRIM(ISNULL(column_name, '')) LIKE ''
    

    ISNULL(column_name, '') 如果列名称为空,将返回“”,否则将返回列名称。

    更新

    在Oracle中,您可以使用 NVL 达到同样的效果。

    SELECT column_name from table_name
    WHERE RTRIM(NVL(column_name, '')) LIKE ''
    
        3
  •  5
  •   bvwidt    9 年前

    检查时 null or Empty 对于一个列,我注意到在各种数据库中存在一些支持问题。

    每个数据库都不支持 TRIM 方法。

    下面的矩阵只是为了理解不同数据库支持的方法。

    SQL中的trim函数用于从字符串中删除指定的前缀或后缀。删除的最常见模式是空白。此函数在不同的数据库中的调用方式不同:

    • MySQL: TRIM(), RTRIM(), LTRIM()
    • 神谕: RTRIM(), LTRIM()
    • SQLServer: trim(),rtrim(),ltrim())

    如何检查空/空/空白:

    根据不同的数据库,以下是两种不同的方法-

    这些微调函数的语法为:

    1. 使用饰板检查-

      SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL

    2. 使用ltrim&rtrim检查-

      SELECT FirstName FROM UserDetails WHERE LTRIM(RTRIM(LastName)) IS NULL

    以上两种方式都提供相同的结果,只是基于您的数据库支持使用。它只是返回 FirstName UserDetails 表中是否有空 LastName

    希望这也能帮助其他人。)

        4
  •  4
  •   MerrickPlainview    10 年前

    nullif函数将只包含空白的任何列值转换为空值。适用于T-SQL和SQL Server 2008及以上版本。

    SELECT [column_name]
    FROM [table_name]
    WHERE NULLIF([column_name], '') IS NULL
    
        5
  •  2
  •   Chose    9 年前

    此phpmyadmin查询返回的行不为空或仅为空白:

    SELECT * FROM `table_name` WHERE NOT ((`column_name` IS NULL) OR (TRIM(`column_name`) LIKE ''))
    

    如果要选择空/空/仅空白的行,只需删除“不”。

        6
  •  1
  •   dvenkateshreddy    8 年前

    使用下面的查询就可以了

    SELECT column_name FROM table_name where isnull(column_name,'') <> ''
    
        7
  •  -2
  •   TiltonJH    11 年前

    我用什么 IsNotNullOrEmptyOrWhiteSpace 在T-SQL中是:

    SELECT [column_name] FROM [table_name]
    WHERE LEN(RTRIM(ISNULL([column_name], ''))) > 0
    
        8
  •  -3
  •   Marina Planells    11 年前

    在Oracle中,您可以在MySQL中使用nvl函数,您可以使用ifnull(columnaname,newvalue)来实现您希望的结果,如本例所示。

    SELECT column_name from table_name WHERE IFNULL(column_name,'') NOT LIKE '%_%';
    
        9
  •  -5
  •   gong15A    11 年前

    你可以使用

    SELECT [column_name] 
    FROM [table_name]
    WHERE [column_name] LIKE '% %' 
    OR [column_name] IS NULL