SQL 语法从数组中选择自定义字符串未正确选择

问题描述 投票:0回答:1

问题:

我在 SQL 上有点卡住,如果有人能帮助我克服这个问题,我将不胜感激。我正在尝试从多个表(表 A 和 B)中进行选择,但这主要与我从表 B 中选择的唯一列有关。该列中的值包含一个字符串数组。

目标是去掉任何 [],然后查看字符串。有两种主要类型的字符串,一种以“需要一些文本”开头,另一种具有相同的“需要一些文本”,后跟逗号和其他文本,示例包括:

  • “需要一些文字”
  • “需要一些文字,其他”
  • “需要一些文字,额外的文字”
  • “需要一些文字,额外的文字,必需”

其他类型的字符串包含随机文本,不以“需要一些文本”开头。

对于字符串不以“需要某些文本”开头的情况,只需返回文本值,而对于其他字符串,则返回逗号(,)后的值,同时忽略“需要一些文本”,因此输出将类似于:

期望的结果:

  • “其他”
  • “额外文字”
  • “额外文本,必填”

我使用了以下 SQL 代码,它摆脱了 [ 和 ],但它总是让我返回“需要一些文本,其他”,而不仅仅是“其他”

选择 第 1 列、第 2 列、...、第 10 列、 案件 当 CHARINDEX('[', cier.if_text_is_required) > 0 然后替换(替换(cier.if_text_is_required,'[',''),']','') WHEN CHARINDEX('需要一些文本', cier.if_text_is_required) > 0 然后 案件 WHEN CHARINDEX(',', cier.if_text_is_required, CHARINDEX('需要一些文本,', cier.if_text_is_required) + LEN('需要一些文本,')) > 0 THEN LTRIM(SUBSTRING(cier.if_text_is_required, CHARINDEX(',', cier.if_text_is_required, CHARINDEX('需要一些文本,', cier.if_text_is_required) + LEN('需要一些文本,')) + 2, LEN(cier. if_text_is_required))) ELSE cier.if_text_is_required 结尾 ELSE cier.if_text_is_required END AS if_text_is_required

来自表A 左连接 ( SELECT id, if_text_is_required, ROW_NUMBER() OVER (PARTITION BY id ORDER BY date DESC, rn_id DESC) AS rn 来自表B 其中 if_text_is_required 不为空 ) AS cier ON TableA.id = cier.id AND cier.rn = 1

我可以摆脱 [ 和 ] 但是,当字符串包含“需要一些文本”时,我无法仅选择逗号后面的字符串。

有人可以发现上述 SQL 的任何问题并可以帮助我吗?感谢所有帮助。

谢谢

sql-server left-join azure-synapse charindex in-subquery
1个回答
0
投票
SELECT 
      A.*,
      CASE 
          WHEN B.YourColumn LIKE 'some text needed%' 

          THEN STUFF(B.YourColumn, 1, CHARINDEX(',', B.YourColumn + ','), '')
          ELSE REPLACE(REPLACE(B.YourColumn, '[', ''), ']', '')
      END as manipulated_column
    FROM 
      TableA AS A
    JOIN 
      TableB AS B 
      ON A.JoinColumn = B.JoinColumn
  • STUFF()
    :该函数用于删除字符串的一部分,并用另一个字符串替换。
  • CHARINDEX()
    :查找一个字符串在另一个字符串中第一次出现的索引。
  • REPLACE()
    :使用两次以删除“[”和“]”
© www.soinside.com 2019 - 2024. All rights reserved.