如何将值与文本列进行比较
本文关键字:比较 文本 | 更新日期: 2023-09-27 18:07:10
我正在研究一个项目,我正在保存由itextsharp在sql server数据库的一列中提取的pdf的文本。对于一些要求,我必须通过给文档文本作为一个参数来查找文档的过程来搜索文档。我的代码是
@docText varchar(8000)
select * from document d
where convert(varchar(8000),d.text) = @docText
问题是,当文档文本大小小于8000(例如2600)时,则不匹配此查询,并且在上述查询中,我们不能将大小设置为convert(varchar(len(@docText)),d.text)
如何设置列(文本)大小等于动态传递给过程的参数大小
我的第一个想法是你需要这个:
declare @docText varchar(max);
select *
from document d
where d.text = @docText;
VARCHAR(MAX)
是一个类型,它将保存大小从0字节到2 GB的任何varchar。它被称为可变字符,因为它的可变性质。尾随空格被自动认为不重要,即ABCDEF_____ = ABCDEF
(第一个有5个尾随空格)。
由于这个原因(末尾空格处理),不需要CONVERT(varchar(<exact-length>), text)
。
列d.text
定义为什么类型?如果是VARCHAR(8000),那么我建议升级到VARCHAR(MAX)。一本书肯定有超过8000个字符吗?
你确定你没有填充输入@docText与字符组成8000,例如添加尾随点或字节(0)字符?
试试这个
where Charindex(d.text, @docText) > 0
try:
declare @docText varchar(max)
set @doctext = 'test'
select * from document d
where convert(varchar(max),d.text) like '%' +@docText+ '%'
这会将文本值转换为易于使用比较的值,并允许您在文档中的任何位置搜索特定的文本块。
您还应该考虑是否要使用全文搜索。
下一件事是,您确实需要将文本字段更改为varchar (max),因为不赞成使用文本。这是需要对数据库进行的一个关键更改。2008年的数据库没有理由仍然使用文本或文本数据类型。如果不对不推荐的项进行更改,就会导致升级的路径比删除该特性时要痛苦得多(通常在删除不推荐的项之前需要进行多次数据库升级),并最终意味着无法升级。这种类型的数据库维护需要在您想要升级之前很久就完成并测试。