我有一个像1234-56-7-8-9012
这样的字符串。这可以是任何大小,-
之间的值可以是任何大小。我需要在此字符串的中间提取7
,但不能适应字符串的大小变化。这是我一直在使用的,但它不会改变大小:
@String = '1234-56-7-8-9012'
SUBSTRING(
SUBSTRING(@String,CHARINDEX('-',@String)+1,LEN(@String))
,CHARINDEX('-'
,SUBSTRING(@String,CHARINDEX('-',@String)+1,LEN(@String))
)+1
,1
)
这将给出7值,但有时该值将为2。基本上我需要得到第2和第3 -
之间的数字。
答案 0 :(得分:1)
试试这个:
declare @String varchar(50) = '1234-56-7-8-9012'
select substring(@String, charindex('-',@String,charindex('-',@String,1)+1)+1,
charindex('-',@String,charindex('-',@String,charindex('-',@String,1)+1)+1)-
charindex('-',@String,charindex('-',@String,1)+1)-1)
答案 1 :(得分:0)
请尝试:
declare @String nvarchar(1000) = '1234-56-72-9012'
select
LEFT(y, CHARINDEX('-', y)-1)
from(
select
RIGHT(x, LEN(x)-CHARINDEX('-', x)) y
from(
select RIGHT(@String, LEN(@String)-CHARINDEX('-', @String)) x
)x1
)x2
答案 2 :(得分:0)
考虑使用正则表达式,因为我认为SQL Server support them。您现在所需要的只是知道如何通过regex
找到第二个和第三个“ - ”之间的数字。
答案 3 :(得分:0)
SELECT SUBSTRING(@String,
CHARINDEX('-',@String,CHARINDEX('-',@String,1)+1)+1,
CHARINDEX('-',@String,CHARINDEX('-',@String,CHARINDEX('-',@String,1)+1)+1)- CHARINDEX('-',@String,CHARINDEX('-',@String,1)+1)-1);
答案 4 :(得分:-1)
试试这个......你可以在任何角色之间分割一个字符串(' Z'在这里)。
DECLARE @A TABLE (STRG VARCHAR (250))
INSERT INTO @A SELECT 'abcdZabcdefZabcdefghZabcdefghiZabccZaa';
WITH CTE(MOD_STR,STRG)
AS
(
SELECT CONVERT (VARCHAR(250),SUBSTRING(STRG,1,CHARINDEX('Z',STRG)-1))
,CONVERT (VARCHAR(250),SUBSTRING(STRG,CHARINDEX('Z',STRG)+1,LEN(STRG)-CHARINDEX('Z',STRG))) FROM @A
UNION ALL
SELECT CONVERT (VARCHAR(250),MOD_STR +';'+SUBSTRING(STRG,1,CASE WHEN CHARINDEX('Z',STRG)>1 THEN CHARINDEX('Z',STRG)-1 ELSE LEN(STRG) END))
,CONVERT (VARCHAR(250),SUBSTRING(STRG,CASE WHEN CHARINDEX('Z',STRG)>1 THEN CHARINDEX('Z',STRG)+1 ELSE 0 END
,CASE WHEN CHARINDEX('Z',STRG)>1 THEN LEN(STRG)-CHARINDEX('Z',STRG) ELSE 0 END))
FROM CTE WHERE LEN(STRG)<>0
)
SELECT * FROM CTE WHERE LEN(STRG)=0