在sql server表中搜索ASCII值

时间:2013-07-02 16:10:42

标签: sql sql-server

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

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

3 个答案:

答案 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;