Sql 删除字符串的一部分

Sql 删除字符串的一部分,sql,string,tsql,replace,Sql,String,Tsql,Replace,基本上,我在一个表中有一列叫做“details”,它通常包含各种信息,例如: DECLARE @A VARCHAR(MAX), @StartPosistion int, @StringLen int Select -- Setting up the strings to split (details) @StartPosistion = charindex('Eye Colour:', details), @StringLen = patindex('

基本上,我在一个表中有一列叫做“details”,它通常包含各种信息,例如:

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,
我知道理想情况下,这些信息应该存储为单独的列,但让我们假设无论出于何种原因,都没有选择。为了得到某个人的眼睛颜色,我可以运行上面的代码,寻找一个起始位置,在这个例子中是“眼睛颜色”,然后显示这一行中的所有内容,同时删除周围所有不需要的信息

基本上,运行底部select语句会给我输出“Eye color:Red”,但是如果我想删除“Eye color:”这个词,那么唯一输出的就是“Red”这个词呢。有没有一种方法可以在不过度复杂化代码的情况下实现这一点?谢谢你的帮助

当您使用charindex(“眼睛颜色:”,详细信息)时,charindex将返回眼睛颜色的起始位置,但理想情况下,您需要在眼睛颜色之后的位置,这样您就可以硬编码11+1,11是“眼睛颜色:”,加1是红色的实际起始位置

你能告诉我关于价值的详细情况吗,这样我可以更好地帮助你

问候


Ashutosh Arya

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

使用“子字符串(XXX.XXX,@startposition,@StringLen-1)作为眼睛颜色”,您将获得“眼睛颜色:红色”

所以围绕着这个

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

我想你可以做一个简单的替换。请看这里:请给出列中的确切值,至少两个。.详细信息列中的两个数据示例是:姓名:约翰·毕肖普年龄:40头发颜色:蓝眼睛颜色:红色体重:120公斤和姓名:蒂姆·汤姆年龄:19头发颜色:棕色眼睛颜色:黑色体重:90公斤当然,我想得不对,谢谢你的回答!我按照你的建议做了,效果很好。不过,就性能而言,您认为您的方式比在某处添加替换语句更好吗?我的猜测是,硬编码的立场将更好,因为做一个替换将最终使用更多的资源。你认为呢?欢迎:)硬编码是好的,因为传入的coulumn总是这样,即使你使用replace,你也必须硬编码值,说replace'Eye color:'用sothing说','。就性能而言,两者几乎相同,在本栏中添加索引将有所帮助。干杯
Replace (substring(XXX.XXX ,@StartPosistion ,@StringLen-1 ), 'Eye Colour: ', '') AS EyeColourValueOnly