sql - 获取 MS SQL 中特定 varchar 的行数

标签 sql sql-server xml tsql

在 MS SQL Server 2012 中,我有一个数据库,其中包含一个包含 varchar 列的表,该列包含一些甚至可能包含换行符的文本。

基本示例:

CREATE TABLE Example
(
    [ID] INT
  , [Text] VARCHAR(100)
);

INSERT INTO Example ([ID], [Text])
VALUES
        (1, 'This is a test'),
        (2, 'This is another
         test with
         two line breaks'),
        (3, 'This is a test
         with one line break');

现在我想获取每条记录的总文本行数,即,如下所示:

--------------------
| ID | LinesOfText |
--------------------
|  1 |           1 |
--------------------
|  2 |           3 |
--------------------
|  3 |           2 |
--------------------

不幸的是,似乎没有内置函数来处理这样的事情。我的想法是数Chr(10)+Chr(13)出现并在末尾加 1。但是CHARINDEX只查找字符串中的第一次出现。

知道如何解决这个问题吗?

可能有用的额外信息:为了更深入地了解我的数据,“文本”来自包含换行符的 XML 字符串,例如

...
<a>This is
   another test
   with two line breaks</a>
... 

我使用 CROSS APPLY XML.nodes(...和 XPath 找到所有 <a> XML 中的节点。这可以直接用 T-SQL XML 函数解决吗?

最佳答案

使用 Replace 通过替换为空 ('') 来消除换行符。然后您可以从原始文本中减去修改后的文本的长度。

关于sql - 获取 MS SQL 中特定 varchar 的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17063757/

相关文章:

sql-server - 在 SQL Server 2008 中插入希伯来语值

java - 编码时根据条件忽略字段

sql - 如何在 PostgreSQL 中使用 case 获取多个记录?

mysql - 嵌套查询比连接查询快吗?

.net - 单个事务下具有相同连接字符串的多个连接,提升事务?

java - Information_schema 不是从 jooq for SQL Server 生成的

python - 从一堆 SQL 语句中解析表名

sql - 强制表之间的约束

c# - 设置中的 XDocument

java - 为 xpathexpression 节点列表的每个成员添加前缀