substring或rtrim

时间:2011-05-02 19:36:14

标签: sql-server tsql

我有一个名为LastWebpage的字段,在字段中它存储网页.asp页面名称 我必须编写一个脚本,我只需要使用jl_AssessmentDirect.asp名称而不是4000_1_jl_AssessmentDirect.asp。我如何摆脱4000_1_。请帮忙。

感谢。

3 个答案:

答案 0 :(得分:1)

以下是两种方法,我假设数据并不总是相同,这只是为了向您展示这些功能是如何工作的

正确或替换是我的首选方法

DECLARE @v VARCHAR(100)
SELECT @v = '4000_1_jl_AssessmentDirect.asp'

SELECT REPLACE(@v,'4000_1_','')

DECLARE @v VARCHAR(100)
SELECT @v = '4000_1_jl_AssessmentDirect.asp'

DECLARE @r VARCHAR(100)
SELECT @r ='4000_1_'

--if you have spaces RTRIM and LTRIM everything
SELECT RIGHT(@v,LEN(@v) -LEN(@r))

如果内容发生变化,您可以将其转储到变量

DECLARE @v VARCHAR(100)
SELECT @v = '4000_1_jl_AssessmentDirect.asp'

DECLARE @r VARCHAR(100)
SELECT @r ='4000_1_'

SELECT REPLACE(@v,@r,'')

理想情况下,您希望将此类列更新为仅包含URL而不包含任何其他内容

答案 1 :(得分:1)

“这取决于”

  • 如果始终为“4000_1_”,请按照SQLMenace的回答使用REPLACE。

  • 如果是任何字符串的固定长度,请使用SUBSTRING。无需首先解决LENGTH

SUBSTRING(MyValue, 8, 8000)

  • 如果右侧是固定长度且不需要的部分是可变长度,请使用右侧

  • 如果双方都是可变的,你需要像

  • 这样的东西

SUBSTRING(MyValue, PATINDEX('%[_]1[_]%', MyValue) + 3, 8000)

编辑:

如果你总是想要“jl”...

SUBSTRING(MyValue, PATINDEX('%jl%', MyValue), 8000)

答案 2 :(得分:0)

除了此处的所有建议,您还可以使用stuff

declare @s varchar(100)
set @s = '4000_1_jl_AssessmentDirect.asp'

select stuff(@s, 1, 7, '') 

删除jl

之前的字符
declare @s varchar(100)
set @s = '4000_1_jl_AssessmentDirect.asp'

select stuff(@s, 1, charindex('jl', @s)-1, '')