2011-11-29 58 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

这可以节省我改变表格的设计。天才! –

相关问题