问题:
我在 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 的任何问题并可以帮助我吗?感谢所有帮助。
谢谢
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()
:使用两次以删除“[”和“]”