2011-11-29 88 views
1

我試圖獲取特定搜索的所有值,而不管字段大小寫。在我們的SQL Server數據庫區分大小寫的情況下,我不想在可能的情況下更改它。SQL在字段中搜索具有文本數據類型的字段,而不管字段的值是什麼

如果我這樣做,包括LOWER()函數如下SELECT語句

SELECT COUNT(blogpostId) as blogpostcount 
FROM blogposts 
WHERE stateId = '1' 
AND blogId = '20' 
AND LOWER(blogpostContent) LIKE '%test%' 

它拋出來,說錯誤

參數的數據類型的文本是較低的函數的參數1無效。

blogpostContent列的數據類型爲text。如果我將其更改爲nvarchar,則此功能有效,但nvarchar只允許最多255個字符,因此我需要更多。

是否有無論如何檢查文本字段中的結果,而不考慮外殼?

在此先感謝

+0

http://msdn.microsoft.com/en-us/library/ms143432.aspx說nvarchar的最大長度是2^31-1(幾乎每個DBMS變量可以有數千個字符長)。 – Viruzzo

+0

'NVARCHAR(MAX)'允許**高達2 GB **的文本! (在SQL Server 2005和更新版本中可用)這就是Tolstoj的*戰爭與和平* - 幾次了!這還不夠嗎? 'TEXT'和'NTEXT'從SQL Server 2005開始被棄用,不應該使用 - 也因爲這個問題:它們不支持很多字符串函數... –

+0

nvarchar應該允許4000個字符,而不是255.對於SQL Server 2005+,你可以使用nvarchar(max)。 –

回答

6

你可以明確地強制使用不區分大小寫的排序規則,像這樣:

SELECT COUNT(blogpostId) as blogpostcount 
FROM blogposts 
WHERE stateId='1' 
AND blogId = '20' 
AND blogpostContent LIKE '%test%' COLLATE SQL_Latin1_General_CP1_CI_AS 
+0

這可以節省我改變表格的設計。天才! –

相關問題