Làm cách nào để kiểm tra xem cột văn bản SQL Server có trống không?


183

Tôi đang sử dụng SQL Server 2005. Tôi có một bảng có cột văn bản và tôi có nhiều hàng trong bảng trong đó giá trị của cột này không phải là null, nhưng nó trống. Cố gắng so sánh với '' mang lại phản hồi này:

Các kiểu dữ liệu văn bản và varchar không tương thích trong toán tử không bằng toán tử.

Có một chức năng đặc biệt để xác định xem giá trị của một cột văn bản không phải là rỗng mà là trống rỗng?


1
Tôi sẽ chuyển đổi kiểu dữ liệu nếu có thể thành varchar (max), văn bản không được dùng nữa - tốt nhất là bắt đầu thực hiện các thay đổi ngay bây giờ nếu bạn chạm vào bảng. Kiểm tra với dba của bạn tất nhiên. Nhưng càng nhiều thứ có thể được chuyển đổi trước khi chúng phải được chuyển đổi thì càng tốt hơn là suy nghĩ của tôi. Nó sẽ phụ thuộc vào số lượng mã bạn có sử dụng những thứ như chứa và viết văn bản sẽ bị phá vỡ để làm điều này ngay bây giờ, nhưng tôi đưa nó lên, vì vậy bạn biết rằng cuối cùng sẽ cần phải thay đổi.
HLGEM

Câu trả lời:


304
where datalength(mytextfield)=0

2
Đây không phải là câu hỏi thực sự, nhưng chỉ là một nhận xét cho những người chỉ đọc tiêu đề, đừng quên thêm OR mytextfield IS NULLkhi cột của bạn có thểNULL
Daan

2
mytextfield IS NULL *OR*:-)
ban-geengineering

3
@ ban-Geoengineering SQL Server T-SQL không tôn trọng các kỹ thuật đánh giá ngắn mạch, vì vậy thứ tự ở đây không ảnh hưởng đến kết quả.
Conrad

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

Truy vấn trên sẽ thực sự xử lý tính vô hiệu và tính trống rỗng của một cột văn bản và theo đó gán giá trị dựa trên điều kiện. Upvote cho câu trả lời vì đây là những gì tôi đang tìm kiếm. Cảm ơn
user_v

28

Trên thực tế, bạn chỉ cần sử dụng toán tử THÍCH.

SELECT * FROM mytable WHERE mytextfield LIKE ''

+1 Tôi thích câu trả lời này hơn các câu hỏi khác ở đây vì nó không phụ thuộc vào chi phí bổ sung của việc gọi các Hàm SQL như DataLdrops (), IsNull () hoặc Cast (). Có thể gói truy vấn được tạo giống nhau (tôi không kiểm tra); Tôi vẫn thấy đây là một cách tiếp cận sạch hơn.
MikeTeeVee

5

Để chỉ nhận các giá trị trống (và không phải giá trị null):

SELECT * FROM myTable WHERE myColumn = ''

Để có được cả hai giá trị null và rỗng:

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

Để chỉ nhận các giá trị null:

SELECT * FROM myTable WHERE myColumn IS NULL

Để nhận các giá trị khác null và rỗng:

SELECT * FROM myTable WHERE myColumn <> ''


Và hãy nhớ chỉ sử dụng các cụm từ THÍCH khi cần thiết vì chúng sẽ làm giảm hiệu suất so với các loại tìm kiếm khác.


Ý bạn là myColumn IS NOT NULL AND my column = '';sao?
bcsb1001

2

Sử dụng toán tử IS NULL:

Select * from tb_Employee where ename is null

1
atoumey nói trong câu hỏi rằng "giá trị của cột này không phải là null, nhưng nó trống rỗng" do đó ISNULL () sẽ không hoạt động :)
GazB

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

1
được nâng cấp, nhưng ... trong đó ISNULL (TRIM (Trường), '') = '' thậm chí còn tốt hơn ;-), nếu bạn cảm thấy rằng "" là một chuỗi rỗng ngay cả với khoảng trắng bên trong
Kirsten

Đối với MySQL, cú pháp đúng là:SQL SELECT * FROM TABLE WHERE IFNULL(FIELD, '')=''
Cláudio Silva

1

Tôi biết bài này là cổ xưa, nhưng tôi thấy nó hữu ích.

Nó không giải quyết được vấn đề trả lại bản ghi của tôi với trường văn bản không trống nên tôi nghĩ tôi sẽ thêm giải pháp của mình.

Đây là mệnh đề nơi làm việc cho tôi.

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



0

Là null và một chuỗi rỗng tương đương? Nếu có, tôi sẽ đưa logic vào ứng dụng của mình (hoặc có thể là trình kích hoạt nếu ứng dụng là "ngoài luồng"?) Để buộc trường thành null hoặc '', nhưng không phải là trường khác. Nếu bạn đã đi với '', thì bạn cũng có thể đặt cột thành KHÔNG NULL. Chỉ là một điều sạch dữ liệu.


0

Tôi muốn có một văn bản được xác định trước ("Không có phòng thí nghiệm khả dụng") được hiển thị nếu giá trị là rỗng hoặc trống và bạn tôi đã giúp tôi điều này:

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

Wow, một truy vấn phụ. Điều đó không đắt chút nào.
Jay Cro Afghanistan

0

Bạn phải làm cả hai:

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


0

Tôi biết có rất nhiều câu trả lời với các giải pháp thay thế cho vấn đề này, nhưng tôi chỉ muốn kết hợp những gì tôi thấy là giải pháp tốt nhất của @Eric Z Beard & @Tim Cooper với @Enrique Garcia & @Uli Köhler.

Nếu cần thiết để đối phó với thực tế là chỉ có không gian có thể giống như trống trong kịch bản ca sử dụng của bạn, bởi vì truy vấn bên dưới sẽ trả về 1, không phải 0.

SELECT datalength(' ')

Vì vậy, tôi sẽ đi cho một cái gì đó như:

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


0

Thay vì sử isnulldụng sử dụng a case, vì hiệu suất nó là trường hợp tốt hơn.

case when campo is null then '' else campo end

Trong vấn đề của bạn, bạn cần phải làm điều này:

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

Mã như thế này:

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

Trước tiên, bạn kiểm tra xem có phải là null không, sau đó bạn sử dụng chức năng len ... tôi hy vọng nó có ích
Enrique Garcia

Điều gì xảy ra nếu Cột không phải là NULL và rỗng, không có Văn bản?
Muhammad nói

0
DECLARE @temp as nvarchar(20)

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

SELECT IIF(ISNULL(@temp,'')='','[Empty]',@temp)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.