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

时间:2013-03-27 15:50:57

标签: sql sql-server null where

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

16 个答案:

答案 0 :(得分:182)

Select *
From Table
Where (col is null or col = '')

或者

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

答案 1 :(得分:25)

你可以这样做:

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

答案 2 :(得分:18)

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

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

您可以用替换值替换null

答案 3 :(得分:15)

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

答案 4 :(得分:7)

要查找col为NULL的行,空字符串或空格(空格,制表符):

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

要查找col为NOT NULL的行,空字符串或空格(空格,制表符):

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

答案 5 :(得分:6)

一些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,'') = '';

答案 6 :(得分:3)

这是丑陋的MSSQL:

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

答案 7 :(得分:1)

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

答案 8 :(得分:1)

您可以使用isnull函数获取文本字段的null和空值:

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

答案 9 :(得分: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}}

答案 10 :(得分:1)

我最好的解决方案:

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

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

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

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

在python中为例子:

def coalesce(fieldValue):
    if fieldValue in (null,''):
        return 0
祝你好运

答案 11 :(得分:1)

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

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

答案 12 :(得分:1)

by this function:

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

and use this:

dbo.isnull(value,0)

答案 13 :(得分: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()

答案 14 :(得分:1)

您检查是否为空(IS为NULL)和字符串为空(LEN(RTRIM(LTRIM(Column))))= 0 在

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

答案 15 :(得分:1)

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