2008-08-28 45 views
151

我正在使用SQL Server 2005.我有一個帶有文本列的表,並且表中有許多行,其中此列的值不爲null,但爲空。嘗試與''進行比較產生此響應:如何檢查SQL Server文本列是否爲空?

數據類型text和varchar在不等於運算符中不兼容。

有一個特殊的函數來確定文本列的值是否不爲空,但空的?

+1

我會轉換數據(典型值)如果可能的話varchar(max),文本已被棄用 - 如果您正在觸摸表格,最好現在開始進行更改。當然,請檢查你的dba。但更多的事情可以轉換之前,他們必須轉換更好的是我的想法。這取決於你使用了多少代碼來包含和編寫文本,這些代碼將會被破壞,以至於現在是否要執行此操作,但是我會提出這些代碼,以便您瞭解最終需要對其進行更改。 – HLGEM 2010-06-23 18:35:08

+0

在給出正確答案並標記爲正確答案後,我從未見過這麼多不正確答案! – 2013-02-06 19:35:32

回答

241
where datalength(mytextfield)=0 
+10

http://msdn.microsoft.com/en-us/library/ms173486.aspx – 2010-09-29 18:50:57

+0

這不是真正的問題,只是對只讀標題的人的一個評論,不要忘記添加`OR mytextfield IS NULL`當你的列可以是'NULL` – Daan 2015-08-27 09:50:28

+0

`mytextfield IS NULL *或*`:-) – 2016-11-20 20:24:32

21

其實,你只需要使用LIKE運算符。

SELECT * FROM mytable WHERE mytextfield LIKE '' 
+3

似乎無法在SQL Server 2008中運行 – escist 2012-06-26 11:31:36

0

是空還是空字符串等效?如果是這樣,我會在我的應用程序中包含邏輯(或者如果應用程序是「開箱即用」的話,可能會觸發一個觸發器)來強制該字段爲空或「」,而不是其他字符。如果您使用'',那麼您可以將列設置爲NOT NULL。只是一個數據清潔的事情。

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

我想有一個預定義的文本(「無可用實驗室」),以顯示如果值爲null或空了,我的朋友幫我看看這個:

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

我知道這個帖子是古老的,但我發現它很有用。

它沒有解決我的問題,返回非空文本字段的記錄,所以我想我會添加我的解決方案。

這是爲我工作的where子句。

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

你必須做兩件事:

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

2

你可以不喜歡

SELECT * FROM TABLE WHERE FIELDNAME='' 
1

使用IS NULL操作:

Select * from tb_Employee where ename is null 
0
SELECT * FROM TABLE 
WHERE ISNULL(LTRIM(RTRIM(FIELD)),''='' 
6

要獲得唯一的空值(而不是空值):

SELECT * FROM myTable WHERE myColumn = '' 

要同時獲得空和空值:

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

要獲得唯一的空值:

SELECT * FROM myTable WHERE myColumn IS NULL 

要獲得除空和空之外的值:

SELECT * FROM myTable WHERE myColumn <> '' 


請記住只在必要時使用LIKE短語,因爲與其他類型的搜索相比,它們會降低性能。

0

我知道有替代品對這個問題的答案很多,但我只是想放在一起我發現通過@Ericž鬍子& @Tim庫珀與@Enrique加西亞& @Uli科勒的最佳解決方案。

如果需要處理的事實,僅空間可以是相同的用例場景空,因爲下面的查詢將返回1,不是0

SELECT datalength(' ') 

因此,我去的東西,如:

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

使用DATALENGTH方法,例如:

SELECT length = DATALENGTH(myField) 
FROM myTABLE