删除字符串的一部分

时间:2013-07-25 09:40:29

标签: sql string tsql replace

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'这个词。有没有办法解决这个问题,而不会使代码过于复杂?谢谢你的帮助。

2 个答案:

答案 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