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 的计数吗?

4

3 回答 3

4

使用您提供给我们的代码,您的查询应该可以正常工作。所以细节似乎有所不同,我怀疑 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) + '%')
于 2013-07-02T16:28:55.753 回答
0

尝试使用虚拟表。在用空字符串替换您要查找的字符后,我添加了评论字段和评论字段的长度差异。

SELECT SUM(DIF) FROM (
select    
(
  LEN(comments)
          - LEN( REPLACE(   REPLACE ( comments, char(13), ''),char(10),'') ) 
) 
 AS DIF    
 from #testComments
 ) as VT;
于 2013-07-02T16:40:11.710 回答
0

查询将只返回上述数据的 1 个条目的计数。知道如何更改查询以返回 2 的计数吗?

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

所以不管你有没有这个:

"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 ...
于 2013-07-02T16:30:24.813 回答