我想要一个简单的解决方案,只选择VARCHAR列右边的数字 在某个角色之前。
例如,在下面的字符串中,我只想在斜杠字符之前选择数字。数字有所不同,可以是1位数或更多。
'ST / 11 / SCI / 1 ''ST / 11 / SCI / 22 ''ST / 11 / BIO / 854 ''ST / 11 / BIO / 5421 '
答案 0 :(得分:3)
您可以将REVERSE
与CHARINDEX
一起使用,以便找到最后'/'
个字符的位置。然后使用RIGHT
提取数字:
DECLARE @str VARCHAR(100) = 'ST/11/BIO/854'
SELECT RIGHT(@str, CHARINDEX('/', REVERSE(@str)) - 1)
修改强>
要从最后开始获得第二个数字,您可以使用:
DECLARE @str VARCHAR(100) = 'ST/11/BIO/1288/544'
SELECT SUBSTRING(@str, q2.x + 2, q2.x - q1.x - 1)
FROM (SELECT @str AS v) AS t
CROSS APPLY (SELECT CHARINDEX('/', REVERSE(@str))) AS q1(x)
CROSS APPLY (SELECT CHARINDEX('/', REVERSE(@str), q1.x + 1)) AS q2(x)
CROSS APPLY (SELECT LEN(@str)) AS s(l)
答案 1 :(得分:2)
使用SUBSTRING, CHARINDEX, REVERSE
REVERSE: REVERSE
原始字符串值
CHARINDEX:它会从字符串值中找到任何字符的索引/位置
SUBSTRING:它会拆分你的字符串值
DECLARE @myString as VARCHAR(50)='ST/11/SCI/22'
SELECT
REVERSE
(
SUBSTRING
(
REVERSE(@myString),
0,
CHARINDEX('/',REVERSE(@myString))
)
)
答案 2 :(得分:2)
我将此作为另一个答案,因为该方法与我的另一个答案完全不同:
从SQL Server 2012开始(thx @NEER!)有PARSENAME
,这是将点分隔字符串最多分成4个部分的非常直接的方法:
DECLARE @stringTable TABLE(string VARCHAR(100));
INSERT INTO @stringTable VALUES
('ST/11/SCI/1'),('ST/11/SCI/22'),('ST/11/BIO/854'),('ST/11/BIO/5421');
SELECT PARSENAME(REPLACE(s.string,'/','.'),1)
FROM @stringTable AS s
结果
1
22
854
5421
答案 3 :(得分:0)
如果您需要所有数据,可以轻松拆分并输入类型:
DECLARE @stringTable TABLE(string VARCHAR(100));
INSERT INTO @stringTable VALUES
('ST/11/SCI/1'),('ST/11/SCI/22'),('ST/11/BIO/854'),('ST/11/BIO/5421');
SELECT s.string
,x.value('/x[1]','nvarchar(10)') AS Part1
,x.value('/x[2]','int') AS Part2
,x.value('/x[3]','nvarchar(10)') AS Part3
,x.value('/x[4]','int') AS Part4
FROM @stringTable AS s
CROSS APPLY(SELECT CAST('<x>' + REPLACE(s.string,'/','</x><x>')+'</x>' AS XML)) AS A(x)
结果
string Part1 Part2 Part3 Part4
ST/11/SCI/1 ST 11 SCI 1
ST/11/SCI/22 ST 11 SCI 22
ST/11/BIO/854 ST 11 BIO 854
ST/11/BIO/5421 ST 11 BIO 5421
答案 4 :(得分:0)
您可以结合使用reverse
和charindex
:
select reverse(left(reverse(...), charindex('/', reverse(...)) -1))
反向文档:https://msdn.microsoft.com/fr-fr/library/ms180040.aspx
charindex的文档:https://msdn.microsoft.com/fr-fr/library/ms186323.aspx
测试:select reverse(left(reverse('ST/11/SCI/2'), charindex('/', reverse('ST/11/SCI/2')) -1))
输出:2
注意:我们不知道您的SQL-Server版本,请查看reverse / charindex文档以了解支持哪种版本的SQL Server!