SQLでNULLまたは空の文字列を使用する方法


129

WHERESQL Serverの句でNULLと空の文字列を同時に使用する方法を教えてください。null値または空の文字列を含むレコードを検索する必要があります。ありがとう。


5
SQLにはORキーワードがあります。
Robert Harvey

13
この質問は、いかなる研究努力も示していません。宿題をすることが重要です。あなたが見つけたものとそれがあなたのニーズを満たさなかった理由を教えてください。これは、時間をかけて自分自身を助けようとしたことを示しており、明白な答えを繰り返すことから私たちを救い、そして何よりも、それはあなたがより具体的で適切な答えを得るのに役立ちます。よくある質問
カーミット2013年

1
列がNULLであるMySQLテーブルからデータを選択する方法の重複の可能性 (これはMySQLの質問でしたが、基本的にはt-sqlの同じ回答です)
Michael Berkowski

回答:




25

SELECTセクションで必要な場合は、次のように使用できます。

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

null置換値で置き換えることができます。


1
OracleのNVL(var1、 'value')は、空の文字列 ''の置換を処理します。T-SQLのIsnull(var1、 'value')はサポートしていません。
Jenna Leaf

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

2
SELECT * FROM TableName WHERE columnNAme IS NULL OR RTRIM(columnName)= ''
Xavier John

2
ザビエルが指摘するように、BOTH行う必要はありませんltrimし、rtrim目標がある場合は、単に空の文字列と比較します。理由:空白しかない場合、1回のトリミングですべて削除されます。たとえば、残りが「abc」または「abc」であるため、比較が失敗するかどうかは気にしません。
ToolmakerSteve

8

colがNULL空の文字列または空白(スペース、タブ)である行を検索するには:

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

colがNOT NULL空の文字列または空白(スペース、タブ)である行を検索するには:

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

7

いくつかの検索可能なメソッド...

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

そして、いくつかのnon-sargableのもの...

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

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

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

3

これは醜いMSSQLです:

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

3

私の最善の解決策:

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

COALESCEは、式list()の最初の非null exprを返します。

fieldValueがnullまたは空の文字列の場合:2番目の要素、次に0を返します。

したがって、0は0と同じであり、このfieldValueはnullまたは空の文字列です。

Pythonの例:

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

幸運を


2

youeは、IS NULLを使用してnullをチェックし、LEN(RTRIM(LTRIM(Column)))を使用して文字列を空にする= 0 in

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



1

isnull関数を使用してnull、テキストフィールドの両方の値と空の値を取得できます。

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

isnull関数は、文字通り、値がnullかどうかをチェックするだけです。文字列がempty( "")の場合は機能しません。
Max Pringle 2018年

@Max Pringle。別に言いません。また、提供されたコードは、質問の要求に対処します。あなたの貢献がわかりません。反対投票の代わりに編集を提案します。
Alberto De Caro

あなたのアドバイスを受けます。私は提案された編集を今入れました。このwhere句は、空の文字列値ではなくnull値のみを取得します。nullifを使用して空の値を取得できます。
Max Pringle 2018年

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

この関数によって:

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()
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.