sql截取查询出的字符串|SUBSTRing|CHARINDEX|reverse|left|right函数

来源:互联网 发布:.co.jp 日本域名 编辑:程序博客网 时间:2024/05/15 01:49

这篇文章是处理查询出的字段我只想要一串字符中的某几个字,或者一个公式中的数字

关键字

charindex:用法;返回某个字符在字符串中的位置

declare @str varchar(100);set @str = 'wangya';select charindex('a',@str)

返回值为     2       

left:用法;格式left('字符串',截取多少位)

declare @str varchar(100);set @str = 'wangya';select left(@str,charindex('a',@str))

返回值为wa

right:用法;格式right('字符串',右往左截多少位)

declare @str varchar(100);set @str = 'wangya';select right(@str,2)

返回值为  ya  是从右侧数两位

reverse:用法;格式reverse('字符串')

declare @str varchar(100);set @str = 'wangya';select reverse(@str);

返回值为  aygnaw 作用反转字符顺序

有这四个方法就可以搞点事情

我有一个表查出的公式是这个样子(下图)

我只想要  "-h"  前的一个数字

那么我就分步骤,我先截取-h以前的数据

select left(CalFormula,case when CHARINDEX('-h',CalFormula)>0 then CHARINDEX('-h',CalFormula)-1 else 0 end) 
from dbo.PM_StoreFormula

dbo.PM_StoreFormula是我的表名,CalFormula 是表中的字段,case when是用来判断 '-h' 是否在这个公式中有,因为可能有的公式没有,你要是全有可以不写,因为没有找到  '-h'  的话会返回0   0-1会报错;返回下图


接下来要取数字了,然而他有可能会有好几个括号,那我只要最后一个括号就好了然而charindex无法取到最后一个,那怎么办?把它反转一下,就可以取到最后一个括号了

select right(left(CalFormula,case when CHARINDEX('-h',CalFormula)>0 then CHARINDEX('-h',CalFormula)-1 else 0 end),--right括号里的left是根据-left截取后的字符串case when CHARINDEX('(',reverse(left(CalFormula,case when CHARINDEX('-h',CalFormula)>0 then CHARINDEX('-h',CalFormula)-1 else 0 end)))>0 then--此条语句是判断反转后的字符串是否存在(CHARINDEX('(',reverse(left(CalFormula,case when CHARINDEX('-h',CalFormula)>0 then CHARINDEX('-h',CalFormula)-1 else 0 end)))-1--存在返回是第几位else 0 end--不存在返回0) from dbo.PM_StoreFormula
返回结果(下图)

你可以作为参考,但不一定适用你的程序,改改就好


阅读全文
0 0