SQL에서 NULL 또는 빈 문자열을 사용하는 방법


129

WHERESQL Server 의 절에서 NULL과 빈 문자열을 동시에 사용하는 방법을 알고 싶습니다 . null 값이나 빈 문자열이있는 레코드를 찾아야합니다. 감사.


5
SQL에 OR 키워드가 있습니다.
Robert Harvey

13
이 질문은 연구 노력을 보여주지 않습니다. 숙제하는 것이 중요합니다 . 찾은 내용과 요구 사항을 충족하지 못한 이유 를 알려주십시오 . 이것은 당신이 시간을내어 자신을 돕기 위해 노력했고, 명백한 답변을 되풀이하는 것을 막아 주며, 무엇보다도보다 구체적이고 적절한 답변을 얻는 데 도움이됩니다. 자주 묻는 질문 .
Kermit

1
열이 NULL 인 MySQL 테이블에서 데이터를 선택하는 방법의 복제 가능 (MySQL 질문이지만 t-sql에 대해 기본적으로 동일한 대답 임)
Michael Berkowski

답변:



27

당신은 단순히 이것을 할 수 있습니다 :

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

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 columnNAme이 NULL이거나 RTRIM (columnName) = ''인 경우
Xavier John

2
자비에르가 지적 하듯이, BOTH 할 필요가 없습니다 ltrimrtrim목표 인 경우 단순히 빈 문자열로 비교. 이유 : 공백 만있는 경우 한 번의 트림으로 모든 공백을 제거합니다. 예를 들어, "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

몇 가지 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,'') = '';

3

이것은 못생긴 MSSQL입니다.

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

3

내 최고의 솔루션 :

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

COALESCE는 표현식 list ()에서 널이 아닌 첫 번째 expr을 리턴합니다.

fieldValue가 null이거나 비어있는 문자열이면 두 번째 요소를 반환하고 0을 반환합니다.

따라서 0은 0과 같으며이 fieldValue는 null이거나 비어있는 문자열입니다.

예를 들어 파이썬에서 :

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

행운을 빕니다


2

youe check null With IS NULL 및 string With With 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인지 확인합니다. 문자열이 비어 있으면 작동하지 않습니다 ( "").
Max Pringle

@Max Pringle. 나는 다르게 진술하지 않습니다. 또한 제공된 코드는 질문 요청을 처리합니다. 당신의 공헌에 확신이 없습니다. 다운 보트 대신 수정을 제안하십시오.
Alberto De Caro

당신의 조언을 취할 것입니다. 나는 제안 된 편집을 지금 넣었다. 이 where 절은 빈 문자열 값이 아닌 null 값만 가져옵니다. 빈 값을 얻기 위해 nullif를 사용할 수 있습니다.
Max Pringle

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()
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.