在SQL Server表中搜索ASCII值

6

我有一张表,其中一个字段需要进行清理。基本的表结构如下:

create table testComments(id int, comments text)

在评论栏中,有些行有太多的“回车”(char(13))和“换行”(char(10))。如果一行中有多个分组,我需要能够修改它。目前我拥有的基本选择语句如下:

  select count(id)
  from testComments
  where comments like('%' +  char(13) + char(10) + char(13) + char(10) + '%')

该查询将找到结果。

"This is a entry in the testComments crlf
crlf
In the comments field that works"

尽管查询不会找到以下列出的注释结果:
"This is an entry in the testComments crlf
crlf
crlf
That will not work"

上述数据的查询仅返回1个条目的计数。您有什么想法可以更改查询以返回2个计数吗?


8
ntexttextimage数据类型将在未来的SQL Server版本中被移除。避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。请改用nvarchar(max)varchar(max)varbinary(max) - marc_s
你是说返回一个计数为2的结果吗?你只需要编写逻辑来选择后面的示例,对吧? - Hart CO
是的,Goat CO,我只需要获取后面的例子的逻辑。 - Chris
3
这个查询应该返回所有这些文本。你确定没有其他问题吗?也许第二个文本只包含 Char(10)(lf)。 - GolezTrol
2
为了阐明@GolezTrol的观点,这里提供一个SQL Fiddle - Andriy M
3个回答

5

使用您提供的代码,您的查询应该可以正常工作。因此,细节似乎有所不同,我怀疑GolezTrol的评论是正确的——一些CRLF对实际上只是单个CR或LF字符。

请尝试以下操作:

select count(id)
  from #testComments
  where comments like('%' +  char(13) + char(10) + char(13) + char(10) + '%')
     or comments like('%' +  char(10) + char(10) + '%')
     or comments like('%' +  char(13) + char(13) + '%')

这是正确的,我知道它像这样简单。我只是想不出来。谢谢。 - Chris

0

查询将仅返回上述数据的1个条目计数。有什么办法可以更改查询以返回2个计数吗?

我认为你误解了一些基本的东西。 COUNT函数返回所有返回行的计数。在您的示例中,它仍然返回一个行。

所以无论您是否拥有此内容:

"This is an entry in the testComments crlf
crlf
That will not work"

或者这样:

"This is an entry in the testComments crlf
crlf
crlf
crlf
crlf
That will not work"

COUNT仍然会返回1!(如果您有一条记录包含此字符串)

编辑:如果您确实想要计算每行的字符数,请看这里:

SELECT LEN(REPLACE(myColumn, 'yourCharacter', '')) FROM ...

0
尝试使用虚拟表。我总结了注释字段长度的差异以及在用空字符串替换您要查找的字符之后的注释字段长度。
SELECT SUM(DIF) FROM (
select    
(
  LEN(comments)
          - LEN( REPLACE(   REPLACE ( comments, char(13), ''),char(10),'') ) 
) 
 AS DIF    
 from #testComments
 ) as VT;

我相信他不仅仅想检测带有CR或LF的字符串,而是想检测相互紧挨着且之间没有其他字符的CRLF字符串对。(即他正在寻找空行) - John Fisher
然后他只需要用感兴趣的字符替换char(13) / char(10)。至少,这应该足以开始了。 - rgrano
那不是他提问的原因吗?如果不回答这个问题,你又如何帮助他呢? - John Fisher
我以后会更加具体地回答问题。 - rgrano

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接