1
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,

本质上,我在一个名为“详细信息”的表中有一个列,该列通常包含各种信息,例如:

Name: Person Person
Age: 40
Hair Colour: Blue
Eye Colour: Red

我知道理想情况下应该将这些信息存储为单独的列,但让我们假设无论出于何种原因都别无选择。为了只取回某个人的眼睛颜色,我可以运行上面的代码来查找起始位置,在本例中是“眼睛颜色:”,然后在删除所有不需要的信息的同时显示该行中的所有内容周围。

本质上,运行底部的选择语句会给我输出“眼睛颜色:红色”,但如果我想删除“眼睛颜色:”这个词怎么办,这样输出的唯一东西就是“红色”这个词。有没有办法在不使代码过于复杂的情况下解决这个问题?谢谢你的帮助。

4

2 回答 2

3

当您使用 charindex('Eye Colour:', details) 时,charindex 将返回 Eye Colour 的起始位置,但理想情况下,您需要 Eye color 之后的位置,因此您可以硬编码 11+1,11 是 'Eye Colour: 的长度: ' 加 1 表示 RED 的实际起始位置。

您能否提供有关价值的详细信息,以便我可以提供更好的帮助。

问候

阿舒托什·艾莉亚

于 2013-07-25T09:46:36.940 回答
0

替换您已有的结果中的搜索字符串

使用 "substring(XXX.XXX ,@StartPosistion ,@StringLen-1 ) AS EyeColour" 你会得到 "Eye Colour: Red"

所以围绕那个...

Replace (substring(XXX.XXX ,@StartPosistion ,@StringLen-1 ), 'Eye Colour: ', '') AS EyeColourValueOnly
于 2013-07-25T09:47:35.677 回答