答案 0 :(得分:1)
试试这个:
DECLARE @text VARCHAR(MAX);
SET @text = '79011/67541/545415/5401dfd245/25405244';
SELECT REVERSE(LEFT(REPLACE(REVERSE(@text),LEFT(REVERSE(@text),CHARINDEX('/',REVERSE(@text))),''),CHARINDEX('/',REPLACE(REVERSE(@text),LEFT(REVERSE(@text),CHARINDEX('/',REVERSE(@text))),''))-1));
检查然后将PHT
替换为@text
。
<强> EDTI:强> 更简单的解决方案:
SELECT REVERSE(SUBSTRING(REVERSE(@text)
,CHARINDEX('/', REVERSE(@text)) + 1
,CHARINDEX('/', REVERSE(@text), CHARINDEX('/', REVERSE(@text)) + 1) - CHARINDEX('/', REVERSE(@text)) - 1))
答案 1 :(得分:0)
一种方法 -
SELECT REPLACE(RIGHT(SUBSTRING(PTH, 1, LEN(PTH) - CHARINDEX('/', REVERSE(PTH)))
, CHARINDEX('/', REVERSE(PTH))),'/','')
FROM A
答案 2 :(得分:0)
你可以试试这个:
with x as
(select charindex('/', reverse(pth)) as fst,
charindex('/', reverse(pth), len(charindex('/', reverse(pth)))
+ charindex('/', reverse(pth))) as scnd
from yourtable
)
select reverse(substring(reverse(pth), fst+1, scnd-fst-1)) from x
fst和scnd意味着/
从头到尾的第一次和第二次出现。
答案 3 :(得分:0)
如果这些项目不包含XML保留字符,则可以采用以下解决方案:
DECLARE @Item VARCHAR(8000)
SET @Item = '11/22/33/44'
DECLARE @MyTable TABLE (
ID INT IDENTITY PRIMARY KEY,
Item VARCHAR(8000) NULL
)
INSERT @MyTable
VALUES ('11/22/33/44'), ('11/22/33'), ('11/22'), ('11'), (' '), (''), (NULL)
SELECT x.Item,
CONVERT(XML, '<i>' + REPLACE(x.Item, '/', '</i><i>') + '</i>').value('(i[count(../i) - 1]/text())[1]', 'INT') AS NewItem
FROM @MyTable x
/*
Item NewItem
----------- -----------
11/22/33/44 33
11/22/33 22
11/22 11
11 NULL
NULL
NULL
NULL NULL
*/