关于SQL Server的字符串截取问题

2025-03-22 23:33:08
推荐回答(2个)
回答1:

/*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 行受影响)
*/

回答2:

select substring('123456’|‘1-2-3-4-45-89',1,1)