DECLARE @Str NVARCHAR(500) = '1_BB_CC_DD_AA_EE_YY_WW_HH_GG'
--// 1. 获取下划线在字符串中出现的次数
SELECT LEN(@Str) - LEN(REPLACE(@Str, '_', ''))
--// 2. 获取下划线某次出现的位置下标
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[IndexNumOfStr]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
DROP FUNCTION [dbo].IndexNumOfStr
GO
CREATE FUNCTION dbo.IndexNumOfStr
(
@Str NVARCHAR(500), -- 字符串
@charStr NVARCHAR(50), -- 要查询的字符
@num INT -- 第几次出现
)
RETURNS INT AS
BEGIN
DECLARE @posIndex INT = 0 -- 出现的位置
DECLARE @i INT = 0 -- 查找次数
WHILE @i < @num
BEGIN
SET @i = @i + 1
SET @posIndex = CHARINDEX(@charStr, @Str, @posIndex + 1)
IF @posIndex = 0
BEGIN
RETURN 0
END
END
RETURN @posIndex
END
GO
--// 测试结果
SELECT dbo.IndexNumOfStr(@Str, '_', 10)