SQL Server 텍스트 열이 비어 있는지 어떻게 확인합니까?


183

SQL Server 2005를 사용하고 있습니다. 텍스트 열이있는 테이블이 있고이 열의 값이 null이 아니지만 비어있는 테이블에 많은 행이 있습니다. ''와 비교하려고하면 다음과 같은 응답이 나타납니다.

text 및 varchar 데이터 형식이 연산자와 같지 않습니다.

텍스트 열의 값이 null이 아니고 비어 있는지 확인하는 특수 함수가 있습니까?


1
가능한 경우 데이터 유형을 varchar (max)로 변환하고 텍스트는 더 이상 사용되지 않습니다. 테이블을 만지면 변경을 시작하는 것이 가장 좋습니다. 물론 dba를 확인하십시오. 그러나 개종하기 전에 더 많은 것들이 개종 될 수 있다는 것이 제 생각입니다. 포함 및 쓰기 텍스트와 같은 것을 사용하는 코드의 양에 따라 달라집니다.이 작업을 수행할지 여부에 따라 깨진 텍스트가 표시되므로 결과적으로 변경해야한다는 것을 알고 있습니다.
HLGEM

답변:


304
where datalength(mytextfield)=0

2
이것은 실제적인 질문이 아니라, 제목 만 읽는 사람들에 대한 발언 일뿐입니다. OR mytextfield IS NULL칼럼이있을 때 추가하는 것을 잊지 마십시오NULL
Daan

2
mytextfield IS NULL *OR*:-)
금지 지리 공학

3
@ ban-geoengineering SQL Server T-SQL은 단락 평가 기법을 따르지 않으므로 여기서 순서는 결과에 영향을 미치지 않습니다.
Conrad

47
ISNULL(
case textcolum1
    WHEN '' THEN NULL
    ELSE textcolum1
END 
,textcolum2) textcolum1

위의 쿼리는 실제로 텍스트 열의 null 및 공허 특성을 처리하고 조건에 따라 값을 할당합니다. 이것이 내가 찾던 것이기 때문에 답을지지하십시오. 감사합니다
user_v

28

실제로는 LIKE 연산자 만 사용해야합니다.

SELECT * FROM mytable WHERE mytextfield LIKE ''

+1 DataLength (), IsNull () 또는 Cast ()와 같은 SQL 함수를 호출하는 추가 오버 헤드에 의존하지 않기 때문에 다른 답변 보다이 대답을 선호합니다. 생성 된 쿼리 계획이 동일 할 수도 있습니다 (확인하지 않았습니다). 여전히 나는 이것이 훨씬 더 깨끗한 접근법이라고 생각합니다.
MikeTeeVee

5

빈 값만 얻으려면 (널 값은 아님) :

SELECT * FROM myTable WHERE myColumn = ''

null 값과 빈 값을 모두 얻으려면

SELECT * FROM myTable WHERE myColumn IS NULL OR myColumn = ''

null 값만 가져 오려면

SELECT * FROM myTable WHERE myColumn IS NULL

null 이외의 값을 얻으려면 :

SELECT * FROM myTable WHERE myColumn <> ''


LIKE 문구는 다른 유형의 검색에 비해 성능이 저하되므로 필요할 때만 사용해야합니다.


당신은 의미하지 myColumn IS NOT NULL AND my column = '';않습니까?
bcsb1001

2

IS NULL 연산자를 사용하십시오.

Select * from tb_Employee where ename is null

1
"이 칼럼의 값이 null이 아니라 비어"그러므로 ISNULL하는 문제 atoumey 상태 () 것없는 작업 :
GazB

2
SELECT * FROM TABLE
WHERE ISNULL(FIELD, '')=''

1
upvoted,하지만 ... "ISNULL (TRIM (Field), '') = ''가 더 낫습니다 ;-)," "안에 공백이있는 빈 문자열이라고 생각되면
Kirsten

MySQL의 경우 올바른 구문은 다음과 같습니다.SQL SELECT * FROM TABLE WHERE IFNULL(FIELD, '')=''
Cláudio Silva

1

이 게시물이 고대인 것을 알고 있지만 유용하다고 생각했습니다.

빈 텍스트 필드가 아닌 레코드를 반환하는 문제를 해결하지 못하여 솔루션을 추가 할 것이라고 생각했습니다.

이것은 나를 위해 일한 where 절입니다.

WHERE xyz LIKE CAST('% %' as text)



0

null과 빈 문자열이 동일합니까? 그렇다면 필드를 null 또는 ''이지만 강제로 필드가되도록 응용 프로그램에 논리를 포함 (또는 응용 프로그램이 "즉시 사용 가능한 경우 트리거?") 할 수 있습니다. ''와 함께 사용하면 열을 NOT NULL로 설정할 수도 있습니다. 데이터가 깨끗합니다.


0

값이 null이거나 비어 있고 친구가이를 도와 주면 미리 정의 된 텍스트 ( "No Labs Available")를 표시하고 싶었습니다.

StrengthInfo = CASE WHEN ((SELECT COUNT(UnitsOrdered) FROM [Data_Sub_orders].[dbo].[Snappy_Orders_Sub] WHERE IdPatient = @PatientId and IdDrugService = 226)> 0)
                            THEN cast((S.UnitsOrdered) as varchar(50))
                    ELSE 'No Labs Available'
                    END

와우, 하위 쿼리 전혀 비싸지 않습니다.
Jay Croghan

0

두 가지를 모두 수행해야합니다.

SELECT * FROM Table WHERE Text IS NULL or Text LIKE ''


0

이 문제에 대한 대안으로 많은 답변이 있다는 것을 알고 있지만 @Eric Z Beard & @Tim Cooper가 @Enrique Garcia & @Uli Köhler와 함께 최고의 솔루션으로 찾은 것을 정리하고 싶습니다.

아래 쿼리는 0이 아닌 1을 반환하므로 유스 케이스 시나리오에서 공간 전용이 비어있는 것과 동일하다는 사실을 처리 해야하는 경우.

SELECT datalength(' ')

따라서 나는 다음과 같이 갈 것이다.

SELECT datalength(RTRIM(LTRIM(ISNULL([TextColumn], ''))))


0

성능 을 사용 isnull하기 때문에을 사용하는 대신에 case더 좋습니다.

case when campo is null then '' else campo end

문제에서 다음을 수행해야합니다.

case when campo is null then '' else
  case when len(campo) = 0 then '' else campo en
end

다음과 같은 코드 :

create table #tabla(
id int,
campo varchar(10)
)

insert into #tabla
values(1,null)

insert into #tabla
values(2,'')

insert into #tabla
values(3,null)

insert into #tabla
values(4,'dato4')

insert into #tabla
values(5,'dato5')

select id, case when campo is null then 'DATA NULL' else
  case when len(campo) = 0 then 'DATA EMPTY' else campo end
end
from #tabla

drop table #tabla

먼저 null인지 확인한 다음 len 함수를 사용하십시오 ... 도움이되기를 바랍니다.
Enrique Garcia

텍스트가없는 열이 NULL이 아니고 비어 있지 않으면 어떻게됩니까?
Muhammad Idrees

0
DECLARE @temp as nvarchar(20)

SET @temp = NULL
--SET @temp = ''
--SET @temp = 'Test'

SELECT IIF(ISNULL(@temp,'')='','[Empty]',@temp)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.