2008-08-28 45 views
151

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 nơi giá trị của cột này không phải là rỗng, nhưng nó trống. Đang cố gắng so sánh với '' mang lại phản hồi này:Làm cách nào để kiểm tra xem cột văn bản SQL Server có trống không?

Văn bản loại và văn bản không tương thích trong không bằng toán tử.

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

+1

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

+0

Tôi chưa bao giờ thấy quá nhiều câu trả lời sai sau khi câu trả lời đúng được đưa ra và đánh dấu là câu trả lời đúng! –

Trả lời

241
where datalength(mytextfield)=0 
+10

http://msdn.microsoft.com/en-us/library/ms173486.aspx –

+0

Đây không phải là câu hỏi thực tế, 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 NULL' khi cột của bạn có thể là 'NULL' – Daan

+0

' mytextfield IS NULL * OR * ':-) –

21

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

SELECT * FROM mytable WHERE mytextfield LIKE '' 
+3

Dường như không hoạt động trong SQL Server 2008 – escist

+0

@escist bạn đúng. – Dane

+0

Tuyệt vời! Đơn giản là tốt nhất! –

0

Có null và một chuỗi rỗng tương đương không? Nếu có, tôi sẽ bao gồm logic trong ứng dụng của tôi (hoặc có thể là một kích hoạt nếu ứng dụng là "out-of-the-box"?) Để buộc các lĩnh vực được hoặc null hoặc '', nhưng không phải là khác. Nếu bạn đã đi với '', sau đó bạn có thể thiết lập cột để NOT NULL là tốt. Chỉ là một điều sạch sẽ dữ liệu.

43
ISNULL(
case textcolum1 
    WHEN '' THEN NULL 
    ELSE textcolum1 
END 
,textcolum2) textcolum1 
+0

Truy vấn trên sẽ thực sự xử lý tính rỗng và tính chất trống rỗng của một cột văn bản và gán giá trị tương ứng 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 –

0

Tôi muốn có một văn bản được xác định trước ("No Labs có sẵn") sẽ được hiển thị nếu giá trị là null hoặc rỗng và bạn bè của tôi đã giúp tôi vớ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 
2

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 với trường văn bản trống, vì vậy tôi nghĩ tôi sẽ thêm giải pháp của mình.

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

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

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

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

2

Bạn có thể làm như

SELECT * FROM TABLE WHERE FIELDNAME='' 
+4

Bạn thậm chí không đọc toàn bộ câu hỏi. Như đã nói trong một nhận xét về câu trả lời hiện đã xóa, so sánh với '' đưa ra lỗi xuất hiện trong câu hỏi gốc. –

1

Sử dụng IS NULL điều hành:

Select * from tb_Employee where ename is null 
+0

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

0
SELECT * FROM TABLE 
WHERE ISNULL(LTRIM(RTRIM(FIELD)),''='' 
6

Để có được giá trị chỉ có sản phẩm nào (và giá trị không null):

SELECT * FROM myTable WHERE myColumn = '' 

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

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

Để có được giá trị chỉ null:

SELECT * FROM myTable WHERE myColumn IS NULL 

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

SELECT * FROM myTable WHERE myColumn <> '' 


Và nhớ sử dụng các cụm từ LIKE 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.

+0

Bạn không có nghĩa là 'myColumn IS NOT NULL VÀ my column = ''; '? – bcsb1001

+0

Cảm ơn, đã làm rõ. – Nima

0

Tôi biết có rất nhiều câu trả lời với 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 tìm thấy là giải pháp tốt nhất bởi @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à không gian chỉ có thể là tương tự như sản phẩm nào trong kịch bản use-case của bạn, bởi vì các truy vấn dưới đây sẽ trở lại 1, chứ 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

Sử dụng DATALENGTH phương pháp, ví dụ:

SELECT length = DATALENGTH(myField) 
FROM myTABLE 
Các vấn đề liên quan