如何在SQL中从右侧选择模式之间的值

时间:2015-08-03 18:15:08

标签: sql sql-server-2008 select sql-server-2008-r2

我有表A以及以下数据样本。我想选择最后两个between

的数字/

Data Layout

4 个答案:

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