如何在SQL中使用NULL或空字符串

pos*_*han 113 sql sql-server null where

我想知道如何WHERE在SQL Server 的子句中同时使用NULL和空字符串.我需要查找具有空值或空字符串的记录.谢谢.

cod*_*ger 204

Select *
From Table
Where (col is null or col = '')
Run Code Online (Sandbox Code Playgroud)

要么

Select *
From Table
Where IsNull(col, '') = ''
Run Code Online (Sandbox Code Playgroud)

  • 根据@Bradc在http://stackoverflow.com/questions/799584/what-makes-a-sql-statement-sargable?lq=1中的回答,最好使用第一种方法. (11认同)

Pra*_*iar 26

你可以这样做:

SELECT *
FROM   yourTable
WHERE  yourColumn IS NULL OR yourColumn = ''
Run Code Online (Sandbox Code Playgroud)


Sam*_* R. 22

如果你需要它在SELECT部分可以使用这样.

    SELECT  ct.ID, 
            ISNULL(NULLIF(ct.LaunchDate, ''), null) [LaunchDate]
    FROM    [dbo].[CustomerTable] ct
Run Code Online (Sandbox Code Playgroud)

你可以用null替换值替换.

  • Oracle 的 NVL(var1, 'value') 将处理空字符串 ' ' 替换。T-SQL 的 Isnull(var1, 'value') 则不然。 (2认同)

Joh*_*Woo 15

SELECT *
FROM   TableName
WHERE  columnNAme IS NULL OR 
       LTRIM(RTRIM(columnName)) = ''
Run Code Online (Sandbox Code Playgroud)

  • SELECT * FROM TableName WHERE columnNAme IS NULL OR RTRIM(columnName) = '' (3认同)
  • 正如 Xavier 指出的那样,如果目标只是与空字符串进行比较,则没有必要同时执行 `ltrim` 和 `rtrim`。原因:如果只有空格,则一次修剪将删除所有空格。例如,您不关心比较是否失败,因为剩下的是“abc”或“abc”。 (2认同)

小智 8

要查找col所在的行NULL,请使用空字符串或空格(空格,制表符):

SELECT *
FROM table
WHERE ISNULL(LTRIM(RTRIM(col)),'')=''
Run Code Online (Sandbox Code Playgroud)

要查找col所在的行NOT NULL,请使用空字符串或空格(空格,制表符):

SELECT *
FROM table
WHERE ISNULL(LTRIM(RTRIM(col)),'')<>''
Run Code Online (Sandbox Code Playgroud)


Mar*_*ith 6

一些可靠的方法......

SELECT *
FROM #T
WHERE SomeCol = '' OR SomeCol IS NULL;

SELECT *
FROM #T
WHERE SomeCol = '' 
UNION ALL
SELECT *
FROM #T
WHERE  SomeCol IS NULL;

SELECT *
FROM #T
WHERE EXISTS ((SELECT NULL UNION SELECT '') INTERSECT SELECT SomeCol);
Run Code Online (Sandbox Code Playgroud)

还有一些不可思议的......

SELECT *
FROM #T
WHERE IIF(SomeCol <> '',0,1) = 1;

SELECT *
FROM #T
WHERE NULLIF(SomeCol,'') IS NULL;

SELECT *
FROM #T
WHERE ISNULL(SomeCol,'') = '';
Run Code Online (Sandbox Code Playgroud)


Ano*_*ari 5

我最好的解决方案:

 WHERE  
 COALESCE(char_length(fieldValue), 0) = 0
Run Code Online (Sandbox Code Playgroud)

COALESCE 返回表达式 list() 中的第一个非空 expr。

如果 fieldValue 为 null 或空字符串,则:我们将返回第二个元素,然后是 0。

所以 0 等于 0 那么这个 fieldValue 是一个 null 或空字符串。

以python为例:

def coalesce(fieldValue):
    if fieldValue in (null,''):
        return 0
Run Code Online (Sandbox Code Playgroud)

祝你好运