如何将值与文本列进行比较

本文关键字:比较 文本 | 更新日期: 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年的数据库没有理由仍然使用文本或文本数据类型。如果不对不推荐的项进行更改,就会导致升级的路径比删除该特性时要痛苦得多(通常在删除不推荐的项之前需要进行多次数据库升级),并最终意味着无法升级。这种类型的数据库维护需要在您想要升级之前很久就完成并测试。