DECLARE
@A VARCHAR(MAX),
@StartPosistion int,
@StringLen int
Select -- Setting up the strings to split (details)
@StartPosistion = charindex('Eye Colour:', details),
@StringLen = patindex('%'+CHAR(10)+'%',substring(details,@StartPosistion ,len(details)))
FROM
XXX.XXX --Table/Database
SELECT
substring(XXX.XXX ,@StartPosistion ,@StringLen-1 ) AS EyeColour,
基本上我在一个名为'details'的表中有一个列,它通常填充各种信息,例如:
Name: Person Person
Age: 40
Hair Colour: Blue
Eye Colour: Red
我理所当然地知道这些信息应该存储为单独的列,但我们假设没有任何理由可以选择。为了获得某个人的眼睛颜色,我可以运行上面的代码来查找起始位置,在这种情况下是“眼睛颜色:”,然后显示该行中的所有内容,同时删除所有未提供的信息周围。
基本上,运行底部的select语句会给我输出'Eye Color:Red',但如果我想删除'Eye Color:'这个词,那么输出的唯一内容就是'Red'这个词。有没有办法解决这个问题,而不会使代码过于复杂?谢谢你的帮助。
答案 0 :(得分:3)
当你使用charindex('眼睛颜色:',细节)时,charindex将返回Eye Color的起始位置,但理想情况下你需要在Eye coluor之后定位,所以你只需要硬编码11 + 1,11就是'眼睛颜色:'和加1为实际的RED起始位置。
你能否详细说明价值,以便我能更好地帮助你。
此致
Ashutosh Arya
答案 1 :(得分:0)
替换您已有的结果中的搜索字符串
with“substring(XXX.XXX,@ StartPosistion,@ StringLen-1)AS EyeColour”你得到的“眼睛颜色:红色”
所以... ...
Replace (substring(XXX.XXX ,@StartPosistion ,@StringLen-1 ), 'Eye Colour: ', '') AS EyeColourValueOnly