SQL Server 2017中的字符索引返回错误位置

jtoj6r0c  于 2022-11-21  发布在  SQL Server
关注(0)|答案(2)|浏览(148)

我 试图 在 SQL Server 中 获取 字符 串 中 多 个 CHAR ( 10 ) 字符 的 charindex 。
第 一 个 和 第 二 个 换行符 是 正确 的 , 第 三 个 是 一 个 问题 , 但 。

CHARINDEX(CHAR(10),subadres) AS '1st linebreak',
CHARINDEX(CHAR(10),subadres,(CHARINDEX(CHAR(10),subadres)+1)) AS '2rd linebreak',
CHARINDEX(CHAR(10),subadres,(CHARINDEX(CHAR(10),subadres)+1)+(CHARINDEX(CHAR(10),subadres))) AS '3rd linebreak',

中 的 每 一 个
在 下面 的 示例 中 , 第 二 个 条目 是 可以 的 。 第 一 个 条目 导致 第 三 个 换行符 (||表示 我 的 数据 源 中 的 CHAR ( 10 ) ) 。
我 假设 右边 的 角色 是 造成 这种 情况 的 原因 , 但 我 不 知道 是 如何 ( 以及 为什么 ) 。

Entry nr1:  Line 1||Line 2||Line 3||Line 4||
Entry nr2:  Line 1||Line 2||Line 3||Line4

格式
我 试图 修剪 第 一 行 上 的 尾随 字符 ( 10 ) , 但 这 没有 做 任何 事情 。

xwbd5t1u

xwbd5t1u1#

如果 是 2016 年 以后 , 请 考虑 以下 JSON 方法

    • 示例 * *
Declare @YourTable Table ([subaddrs] varchar(50))  Insert Into @YourTable Values 
 ('Line 1
Line 2
Line 3
Line 4
 ')
,('Line 1
Line 2
Line 3
Line4')
 
Select Pos1 = JSON_VALUE(JS,'$[0]')
      ,Pos2 = JSON_VALUE(JS,'$[1]')
      ,Pos3 = JSON_VALUE(JS,'$[2]')
      ,Pos4 = JSON_VALUE(JS,'$[3]')
      ,Pos5 = nullif(JSON_VALUE(JS,'$[4]'),'')  -- nullif() optional
 From  @YourTable A
 Cross Apply (values ('["'+replace(
                           string_escape(
                           replace(
                           replace([subaddrs],char(13),'')
                           ,char(10),'||')
                           ,'json')
                           ,'||','","'
                           )+'"]'
                      ) ) C(JS)

中 的 每 一 个

    • 结果 * *

2w3rbyxf

2w3rbyxf2#

感谢您的回复。在反复检查查询之后,看起来嵌套的Charindex有问题。
下面的查询可以完成这项工作:

CHARINDEX(CHAR(10),subadres)-1 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',

相关问题