/*Created by SinooSoft at 2014.04.10
*如果数据库中已存在这个函数就先删除再创建
*/
IF OBJECT_ID('getContentFromString','FN') IS NOT NULL
DROP FUNCTION getContentFromString
go
/* Created by SinooSoft at 2014.04.10
* 功能: 获取用特殊符号分隔的字符串中的某个位置的字符
* 参数: @str 传入的字符串, @splitStr 分隔符, @count 分隔符编号,需要获取第几个分隔符后面的字符
*
*/
CREATE FUNCTION getContentFromString(@str VARCHAR(8000), @splitStr VARCHAR(10), @count int )
RETURNS VARCHAR(2000)
AS
BEGIN
DECLARE @char VARCHAR(1000) = '' /*最终返回的字符*/
DECLARE @splitCount INT = LEN(@str)- LEN(REPLACE(@str,@splitStr,'')) /*分隔符数量*/
IF (@count>0 AND @count<=@splitCount+1)
BEGIN
DECLARE @i INT = 0, @startLocation INT = 0, @endLocation INT = 0
/*下段while的作用是获取字符串的开始位置和结束位置*/
WHILE(@i<@count)
BEGIN
SET @startLocation = @endLocation+1
SET @endLocation = CHARINDEX(@splitStr,@str,@startLocation)
IF (@endLocation = 0)
BEGIN
SET @endLocation = LEN(@str)+1
END
SET @i = @i+1
END
END
SET @char = ISNULL(SUBSTRING(@str,@startLocation,@endLocation-@startLocation),'')
RETURN @char
END
GO
/*使用示例1*/
SELECT dbo.getContentFromString('1,2,3,456,5,6',',',4)
/*结果
----
456
(1 行受影响)
*/
/*使用示例2*/
SELECT dbo.getContentFromString('1-2-3-4-45-89','-',6)
/*结果
-----------
89
(1 行受影响)
*/
select substring('123456’|‘1-2-3-4-45-89',1,1)