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

问题描述 投票:0回答:18

我想知道如何在 SQL Server 的

WHERE
子句中同时使用 NULL 和空字符串。我需要查找具有空值或空字符串的记录。谢谢。

sql sql-server null where-clause
18个回答
362
投票
Select *
From Table
Where (col is null or col = '')

或者

Select *
From Table
Where IsNull(col, '') = ''

63
投票

如果您需要在SELECT部分可以这样使用。

SELECT ct.ID, 
       ISNULL(NULLIF(ct.LaunchDate, ''), null) [LaunchDate]
FROM   [dbo].[CustomerTable] ct

您可以将

null
替换为您的替换值。


30
投票

您可以简单地这样做:

SELECT *
FROM   yourTable
WHERE  yourColumn IS NULL OR yourColumn = ''

26
投票
SELECT *
FROM   TableName
WHERE  columnNAme IS NULL OR 
       LTRIM(RTRIM(columnName)) = ''

8
投票

要查找 col 为

NULL
、空字符串或空白(空格、制表符)的行:

SELECT *
FROM table
WHERE ISNULL(LTRIM(RTRIM(col)),'')=''

要查找 col 为

NOT NULL
、空字符串或空白(空格、制表符)的行:

SELECT *
FROM table
WHERE ISNULL(LTRIM(RTRIM(col)),'')<>''

8
投票

一些sargable方法...

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);

还有一些不可控制的...

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

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

SELECT *
FROM #T
WHERE ISNULL(SomeCol,'') = '';

4
投票

我最好的解决方案:

 WHERE  
 COALESCE(char_length(fieldValue), 0) = 0

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

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

因此 0 等于 0,则该 fieldValue 为 null 或空字符串。

以Python为例:

def coalesce(fieldValue):
    if fieldValue in (null,''):
        return 0

祝你好运


3
投票
SELECT *
FROM   Table
WHERE  column like '' or column IS NULL OR LEN(column) = 0

3
投票

您可以使用

isnull
函数来获取
null
和文本字段的空值:

SELECT * FROM myTable
WHERE isnull(my_nullable_text_field,'') = ''

3
投票

这是丑陋的 MSSQL:

CASE WHEN LTRIM(RTRIM(ISNULL([Address1], ''))) <> '' THEN [Address2] ELSE '' END

2
投票
select 
   isnull(column,'') column, * 
from Table  
Where column = ''

2
投票

您可以使用in作为另一种方法

Select *
From Table
Where column in(null, '')

1
投票
--setup
IF OBJECT_ID('tempdb..#T') IS NOT NULL DROP TABLE #T;
CREATE TABLE #T(ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY, NAME VARCHAR(10))
INSERT INTO #T (Name) VALUES('JOHN'),(''),(NULL);
SELECT * FROM #T
 1  JOHN
 2  -- is empty string
 3  NULL

您可以通过使用

''
 将其转换为 
NULL
 来检查 
NULL
NULLIF

--here you set '' to null
UPDATE #T SET NAME = NULLIF(NAME,'')
SELECT * FROM #T 
 1  JOHN
 2  NULL
 3  NULL

或者您可以使用

NULL
''
 检查为 
SELECT ISNULL(NULL,'')

-- here you set NULL to ''
UPDATE #T SET NAME = ISNULL(NULL,'') WHERE NAME IS NULL
SELECT * FROM #T
1   JOHN
2   -- is empty string
3   -- is empty string

--clean up
DROP TABLE #T

1
投票

在sproc中,可以使用以下条件:

DECLARE @USER_ID VARCAHR(15)=NULL --THIS VALUE IS NULL OR EMPTY DON'T MATTER
IF(COALESCE(@USER_ID,'')='')
PRINT 'HUSSAM'

1
投票

通过此功能:

ALTER FUNCTION [dbo].[isnull](@input nvarchar(50),@ret int = 0)
RETURNS int
AS
BEGIN

    return (case when @input='' then @ret when @input is null then @ret else @input end)

END

并使用这个:

dbo.isnull(值,0)


1
投票
SELECT * FROM DBO.AGENDA
WHERE 
  --IF @DT_START IS NULL OR EMPTY
  ( ISNULL( @DT_START,'' ) = '' AND DT_START IS NOT NULL ) -- GET ALL DATE
  OR --ELSE
  ( DT_START >= @DT_START ) --FILTER

-- MORE FILTER

SELECT * FROM DBO.AGENDA
WHERE 
  ( ( ISNULL( @DT_START,'' ) = '' AND DT_START IS NOT NULL ) OR ( DT_START >= @DT_START ) ) 
  AND
  DT_END < GETDATE()

1
投票

您使用 IS NULL 检查 null 并使用 LEN(RTRIM(LTRIM(Column))) = 0 检查字符串为空 在

SELECT *
FROM AppInfra.Person
WHERE   LEN(RTRIM(LTRIM(NationalCode))) = 0 OR  NationalCode IS NULL

0
投票

如果您在 SELECT 部分需要它可以这样使用。

SELECT COALESCE(column1, column2) AS columnName
FROM tabel;

如果column1为空,则返回column2

© www.soinside.com 2019 - 2024. All rights reserved.