如何检查一个单一的testing空/空/空白值?

我想编写一个只使用一个testing的SELECT语句来返回没有值的列(空,空或全部空格)。

我认为这将工作:

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

但是这对NULL值不起作用。

当然我可以补充

 OR column_name IS NULL 

它会工作,但我想要一种方式,使用一个单一的testing。

function上,你应该可以使用

 SELECT column_name FROM table_name WHERE TRIM(column_name) IS NULL 

问题在于COLUMN_NAME上的索引不会被使用。 如果这是一个select性条件,则需要在TRIM(column_name)上具有基于function的索引。

 SELECT column_name from table_name WHERE RTRIM(ISNULL(column_name, '')) LIKE '' 

如果column_name为NULL, ISNULL(column_name, '')将返回'',否则将返回column_name。

UPDATE

在Oracle中,您可以使用NVL来获得相同的结果。

 SELECT column_name from table_name WHERE RTRIM(NVL(column_name, '')) LIKE '' 

当检查列的null or Emptynull or Empty值时,我注意到在各种数据库中有一些支持问题。

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

以下是matrix,以了解不同数据库支持的方法。

SQL中的TRIM函数用于从string中删除指定的前缀或后缀。 最常见的模式是白色空间。 这个函数在不同的数据库中调用的方式不同

  • MySQL: TRIM(), RTRIM(), LTRIM()
  • Oracle: RTRIM(), LTRIM()
  • SQL Server: TRIM(), RTRIM(), LTRIM()

如何检查空/空/空白: –

以下是根据不同数据库的两种不同的方式 –

这些修剪function的语法是:

  1. 使用修剪来检查 –

    SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL

  2. 使用LTRIM&RTRIM进行检查,

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

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

希望这会帮助其他人:)

这个phpMyAdmin查询正在返回那些不为空或空白或空格的行:

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

如果你想select空/空行/只是空白只是删除NOT。

和Oracle一样,你可以在MySQL中使用NVL函数,你可以使用IFNULL(columnaName,newValue)来实现你想要的结果,就像这个例子

 SELECT column_name from table_name WHERE IFNULL(column_name,'') NOT LIKE '%_%'; 

T-SQL中用于IsNotNullOrEmptyOrWhiteSpace是:

 SELECT [column_name] FROM [table_name] WHERE LEN(RTRIM(ISNULL([column_name], ''))) > 0 

您可以使用

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

NULLIF函数将任何只有空白的列值转换为NULL值。 适用于T-SQL和SQL Server 2008以上。

 SELECT [column_name] FROM [table_name] WHERE NULLIF([column_name], '') IS NULL