9

假设我有一个名为 的假想表bookInfo,其中包含以下值:

|id   |book_name   |description   |
-----------------------------------
|1    |book 1      |dummy         |
|2    |book 2      |harry         |
|     |            |potter        |
|     |            |Part 2        |
|3    |...

description第二条记录 ( ) 列的单元格值id = 2在“harry”和“potter”关键字之间包含多个换行符序列,如下所示:

harry \n potter \n part 2

有没有办法计算列中换行符的数量description,例如执行以下操作:

SELECT (count new line)description FROM bookInfo WHERE id=2;

前面的查询应该返回一个整数值2

4

4 回答 4

3

一种简单的方法:

SELECT length(regexp_replace(your_field, E'[^\\n]', '', 'g')) from your_table

注意:position()找到第一个匹配项并返回其位置。

于 2016-09-09T10:42:22.743 回答
3

您可以将字符串的长度与换行符和 out 进行比较。

SELECT (LENGTH(description) - LENGTH(REPLACE(description, '\n', '')) FROM `bookinfo`

修剪计数

如果您只想计算中间的换行符(没有前导换行符和尾随换行符),您可以先修剪它们

SELECT (LENGTH(TRIM(BOTH '\n' FROM description)) - LENGTH(REPLACE(TRIM(BOTH '\n' FROM description), '\n', ''))) FROM `bookinfo`
于 2016-07-06T07:57:43.647 回答
1

您可以为此使用 SQL 标准position函数:

craig=> SELECT position( E'\r' in E'abc\rdef\rghi' );
 position 
----------
        4
(1 row)

或者:

craig=> SELECT position( chr(13) in E'abc\rdef\rghi' );
 position 
----------
        4
(1 row)
于 2013-05-29T08:43:24.020 回答
0

you may look for carriage return by finding char(13) in your table field.

select * from bookinfo where CHARINDEX(char(13),description)<>0

Hope this is helpful

于 2013-05-29T08:33:18.497 回答