SqlServer怎么把80和36数据提取出来

image.png

FineReport Ccc 发布于 2025-1-20 11:18
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
0
华莉星宸Lv7资深互助
发布于2025-1-20 11:31

参考写法,比如截取80

DECLARE @str VARCHAR(50) = '1-2-3-80-46-4';

-- 查找第三个'-'的位置

DECLARE @thirdDashIndex INT;

SET @thirdDashIndex = CHARINDEX('-', @str, CHARINDEX('-', @str, CHARINDEX('-', @str) + 1) + 1);

-- 查找第四个'-'的位置

DECLARE @fourthDashIndex INT;

SET @fourthDashIndex = CHARINDEX('-', @str, @thirdDashIndex + 1);

-- 截取第三个'-'和第四个'-'之间的字符串

SELECT SUBSTRING(@str, @thirdDashIndex + 1, @fourthDashIndex - @thirdDashIndex - 1);

image.png

最佳回答
0
snrtuemcLv8专家互助
发布于2025-1-20 11:20

固定是这个位置?

  • Ccc Ccc(提问者) 是的
    2025-01-20 11:21 
  • snrtuemc snrtuemc 回复 Ccc(提问者) 参考https://blog.csdn.net/ChristopherChen/article/details/52119650
    2025-01-20 11:25 
最佳回答
0
用户k6280494Lv6资深互助
发布于2025-1-20 11:31
-- 创建一个字符串分割函数(如果尚未存在)
CREATE FUNCTION dbo.SplitString
(
@Input NVARCHAR(MAX),
@Delimiter CHAR(1)
)
RETURNS @OutputTable TABLE (SplitData NVARCHAR(MAX))
AS
BEGIN
DECLARE @Start INT, @End INT
SELECT @Start = 1, @End = CHARINDEX(@Delimiter, @Input)
WHILE @Start < LEN(@Input) + 1 BEGIN
IF @End = 0  
SET @End = LEN(@Input) + 1
INSERT INTO @OutputTable (SplitData)
VALUES(SUBSTRING(@Input, @Start, @End - @Start))
SET @Start = @End + 1
SET @End = CHARINDEX(@Delimiter, @Input, @Start)
END
RETURN
END
GO
-- 使用分割函数提取 '80' 和 '36'
DECLARE @InputString NVARCHAR(50) = '1-2-3-80-36-4';
WITH SplitData AS (
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS RowNum, SplitData
FROM dbo.SplitString(@InputString, '-')
)
SELECT
(SELECT SplitData FROM SplitData WHERE RowNum = 4) AS Value80,
(SELECT SplitData FROM SplitData WHERE RowNum = 5) AS Value36;

  • 4关注人数
  • 34浏览人数
  • 最后回答于:2025-1-20 11:31
    请选择关闭问题的原因
    确定 取消
    返回顶部