You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server 2017中CHARINDEX查找多个CHAR(10)返回错误位置求助

解决SQL Server中查找多个CHAR(10)位置的错误问题

你当前的问题出在第三个CHARINDEX的起始位置计算逻辑上,完全搞错了搜索起点的规则。

错误原因分析

你写的第三个换行位置计算式:

CHARINDEX(CHAR(10),subadres,(CHARINDEX(CHAR(10),subadres)+1)+(CHARINDEX(CHAR(10),subadres)))

是把第一个换行的位置重复相加再加1,这根本不是第二个换行之后的正确起始点。找第三个换行时,必须从第二个换行的位置+1开始搜索,而不是基于第一个换行的位置做无意义的乘法。

正确写法

嵌套CHARINDEX写法

直接嵌套计算每个位置,确保每次搜索都从上一个换行的下一位开始:

SELECT
    subadres,
    CHARINDEX(CHAR(10), subadres) AS '1st linebreak',
    CHARINDEX(CHAR(10), subadres, CHARINDEX(CHAR(10), subadres) + 1) AS '2nd linebreak',
    CHARINDEX(CHAR(10), subadres, CHARINDEX(CHAR(10), subadres, CHARINDEX(CHAR(10), subadres) + 1) + 1) AS '3rd linebreak'
FROM your_table;

更清晰的CROSS APPLY写法

如果觉得嵌套太繁琐,用CROSS APPLY分步计算每个位置,可读性更强:

SELECT
    subadres,
    pos1 AS '1st linebreak',
    pos2 AS '2nd linebreak',
    pos3 AS '3rd linebreak'
FROM your_table
CROSS APPLY (SELECT CHARINDEX(CHAR(10), subadres) AS pos1) ca1
CROSS APPLY (SELECT CHARINDEX(CHAR(10), subadres, pos1 + 1) AS pos2) ca2
CROSS APPLY (SELECT CHARINDEX(CHAR(10), subadres, pos2 + 1) AS pos3) ca3;

为什么修剪末尾换行没用?

你的问题核心是起始位置计算错误,和字符串末尾有没有多余换行无关。就算去掉末尾的换行,错误的计算逻辑还是会返回错误的第三个换行位置。

内容的提问来源于stack exchange,提问作者snijder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 05:50:39