我有一张表,其中一个字段需要清理。基本表结构如下:
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的计数吗?
答案 0 :(得分:3)
使用您提供的代码,您的查询应该正常运行。因此细节似乎有所不同,我怀疑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) + '%')
答案 1 :(得分: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 ...
答案 2 :(得分:0)
尝试使用虚拟表。在使用空字符串替换要查找的字符后,我添加了注释字段和注释字段长度的差异。
SELECT SUM(DIF) FROM (
select
(
LEN(comments)
- LEN( REPLACE( REPLACE ( comments, char(13), ''),char(10),'') )
)
AS DIF
from #testComments
) as VT;