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].IndexNumOfStrGOCREATE FUNCTION dbo.IndexNumOfStr( @Str NVARCHAR(500), -- 字符串 @charStr NVARCHAR(50), -- 要查询的字符 @num INT -- 第几次出现)RETURNS INT ASBEGIN 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 @posIndexENDGO--// 测试结果SELECT dbo.IndexNumOfStr(@Str, '_', 10)