我正在尝试使用SQL Server修剪某个单词。例如:我有一张包含以下数据的表格:
Column1 | Column2
---------+-----------------
Test1 | ABC->IT->CDE
Test2 | ABCD->OT->FGH
我试图将输出设为:
Column1 | Column2
--------+----------
Test1 | CDE
Test2 | FGH
即。试图修剪直到第二个箭头“ - >”并在此之后只显示单词。我尝试过使用东西和charindex。
case
when Column2 like '%->%'
then stuff(Column2, 1, charindex('%[A-Z]%->%[A-Z]%->',Column2),'')
else null
end as Test
不确定这是否有效。你能帮我解决这个问题。
提前致谢。
答案 0 :(得分:0)
这可以让你分手。
SELECT
Column1,
REVERSE(LEFT(reverse(Column2), charindex('>', reverse(Column2)) - 1)) as Column2
FROM Table1
答案 1 :(得分:0)
这个怎么样?
DECLARE @t as Varchar(255) = 'ABC->IT->CDE'
select REVERSE(SUBSTRING(REVERSE(@t), 0, CHARINDEX(REVERSE('->'), REVERSE(@t))))
其中@t是你的专栏
答案 2 :(得分:0)
虽然不是绝对必要,但我建议保留用于在用户定义的函数中解析字符串的逻辑。如果需要改进或更新字符串解析逻辑,只需更新函数而不更改其余查询。
根据您的描述,您需要字符串的第3个字或字符串中的最后一个字。我假设您想要第3个单词,并且字符串中的单词数可以是可变的。以下函数应返回您想要的内容。
CREATE FUNCTION GetThirdWord
(
@inputString VARCHAR(200),
@delimitor VARCHAR(10)
)
RETURNS VARCHAR(200)
AS
BEGIN
DECLARE @result NVARCHAR(50);
DECLARE @delimitorLength INT = LEN(@delimitor);
DECLARE @firstDelimitor INT = charindex('->', @inputString);
DECLARE @secondDelimitor INT = charindex('->', @inputString, @firstDelimitor + @delimitorLength);
DECLARE @thirdDelimitor INT = charindex('->', @inputString, @secondDelimitor + @delimitorLength);
IF @secondDelimitor > 0
BEGIN
IF @thirdDelimitor = 0
SET @thirdDelimitor = LEN(@inputString);
SET @result = SUBSTRING(@inputString, @secondDelimitor + @delimitorLength, @thirdDelimitor - @secondDelimitor - @delimitorLength)
END
RETURN @result;
END
可以按以下方式调用该函数:
SELECT Column1,
dbo.GetThirdWord(Column2, '->') AS Column2
FROM YourTableName
答案 3 :(得分:0)
您还没有给我足够的信息以确保这样做有效,但如果您尝试执行此操作的行的格式始终相同,则可以非常轻松地执行以下操作:
select right(Column2,3)
into #NewColumn
from YourTable
where YourConditionsHere
没有必要的正则表达式