SqlServer中先看看这2个函数的作用:
charindex(str1,str,[start]):函数返回子字符串str1在字符串str中的开始位置数值,如果添加了start参数,说明从start值往后查找到第1个位置数值返回;
例:select CHARINDEX('-','A2104010065-000004') 返回值是:12(代表 “- ”所在位置)
substring(str,para1,para2):函数返回字符串str从para1位置开始往后查找长度为para2的子字符串;
例:select substring('A2104010065-000004',1,11) 返回值:A2104010065
在使用举例前要说明,实际业务中字符串长度是不确定的,因此不能当用substring来满足要求;
另外在2019及更高版本中系统已定义了SUBSTRING_INDEX函数,可以直接用来拆分需求。
应用背景:
业务单据中有单据号,不知道有多尔个【-】符号拼接在字段中;但我只需第1个符号前的单据号
字符串。
declare @fnumber varchar(50)
set @fnumber = 'A2104010065-000004-00001-0002'
select case when charindex('-',@fnumber)>0 then substring(@fnumber,1,CHARINDEX('-',@fnumber)-1) else @fnumber END as FNUMBER