sqlserver 实现字符串 开始位置 结束位置 截取

这个博客分享了一个SQL用户定义函数,用于从包含时间描述的字符串中提取并转换成秒数。该函数适用于简单的字符串格式,例如'199天4小时19分0秒'。通过指定前缀和后缀,可以提取中间的时间值。

实现目的:'199天4小时19分0秒';  转 INT 类型的秒        只适用于简单字符串截取 如果有更复杂的源字符串 须慎用

USE [Mobje_Data]
GO
/****** Object:  UserDefinedFunction [dbo].[func_FindText]    Script Date: 2021/1/24 9:31:52  ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER FUNCTION [dbo].[func_FindText](@qianzi_Str VARCHAR(200),@houzui_Str VARCHAR(200),@Str varchar(8000)) 
 RETURNS VARCHAR(50)    
 
as
BEGIN
	declare @result_str VARCHAR(200) 

	--DECLARE @str VARCHAR(50) = '99天4小时19分0秒'; 
 
 
--DECLARE @qianzi_Str VARCHAR(50) ='分' 
--DECLARE @houzui_Str VARCHAR(50)  ='秒'

DECLARE @startStrIndex INT --起始位置  前缀+前缀的长度    99的前缀 是0  

DECLARE @endStrIndex INT --结束字符串位置   

SELECT @startStrIndex=CHARINDEX(@qianzi_Str,@str)+LEN(@qianzi_Str);

SELECT @endStrIndex=CHARINDEX(@houzui_Str,@str) 


SELECT @result_str= SUBSTRING(@str, @startStrIndex, @endStrIndex - @startStrIndex); 
	 
  
	 
  RETURN  @result_str
END

SELECT dbo.func_FindText('', '天', '199天4小时19分0秒');
SELECT dbo.func_FindText('天', '小时', '199天4小时19分0秒');
SELECT dbo.func_FindText('小时', '分', '199天4小时19分0秒');
SELECT dbo.func_FindText('分', '秒', '199天4小时19分0秒');

 

SQL Server提供了多种截取字符串的方法,以下是一些常用函数及其说明: - **LEFT()**:从字符串左边开始截取指定个数的字符,函数格式为`LEFT ( character_expression , integer_expression )`,即`LEFT ( '源字符串' , '要截取左边的字符数' )`。例如`SELECT LEFT('SQL_Server_2008',4 );`,返回结果为`SQL_` [^1]。 - **RIGHT()**:返回字符串中从右边开始指定个数的字符,函数格式为`RIGHT ( character_expression , integer_expression )`,即`RIGHT ( '源字符串' , '要截取右边的字符数' )`。例如`SELECT RIGHT('SQL_Server_2008',4 );`,返回结果为`2008` [^1]。 - **SUBSTRING()**:返回字符、binary、text或image表达式的一部分,函数格式为`SUBSTRING ( character_expression , start , length )`,即`SUBSTRING ( '源字符串' , '截取起始位置(含该位置上的字符)' , '截取长度' )`。例如`SELECT SUBSTRING('SQL_Server_2008',5 ,6);`,返回结果为`Server`。使用时,截取字符的起始位置是从1开始的,若为0,截取的字符数量会减1;截取字符数量可以为0,结果为空,但不可以为负数 [^1][^2]。 - **CHARINDEX()**:返回指定字符在原始值中的位置,函数格式为`CHARINDEX(指定字符,原字符)`。若指定字符为多个字符,只会返回指定字符左字符的位置 [^2]。 - **LEN()**:返回指定字段的长度,函数格式为`LEN(字段)`。当不知道要截取多少数量的时候可以使用该函数 [^2]。 此外,还可以自定义函数来实现特定的字符串截取需求,例如当存的数据是json时,可创建如下函数: ```sql CREATE FUNCTION [dbo].[Fmax] (@str varchar(50),@start VARCHAR(50),@length VARCHAR(50)) RETURNS varchar(max) AS BEGIN DECLARE @Z varchar(max) SET @Z = SUBSTRING(@str, CHARINDEX(@start, @str)+1, CHARINDEX(@length, @str) - CHARINDEX(@start, @str)-1 ) RETURN(@Z) END GO ``` 该函数用于从指定字符串中,根据起始标识和结束标识截取中间的字符串 [^3]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值