Charindex、Patindex、Convert函数

  1.  两个int类型的数相除,结果如何正确保留小数(去掉小数点后面多余的0);
  • CONVERT(data_type(length),expression,style)
参数取值
data_type(length)数据类型,eg: float、int、varchar(50)等
expression需要转的值
style可选项,日期/时间的输出格式的代码,如101代表mm/dd/yy,102代表yy.mm.dd等

测试举例:

create table test1 (
	a int not null ,
	b int not null
	);
	
insert into test1 values(12,5)
insert into test1 values(1,8)
insert into test1 values(12,6)
insert into test1 values(1,3)


select a,b,CONVERT(FLOAT,a/(b*1.0)) as JG from test1


2. Patindex函数

  1 []中任意的一个字符在expression中第一次出现,返回模式第一次出现的起始位置;
    如果搜索的字符串expression中存在多个匹配的,仅返回第一个匹配的位置;
    位置的起始值从1开始;找不到则返回0;

    PATINDEX ( '%[pattern]%' , expression )
    
    eg: PATINDEX ( '%[0]%' , '100101010' )    --返回2 

  2  [^]中任意的一个字符不在expression中第一次出现,就直接返回在第一次出现的位置;
     若找不到,则返回0;

    PATINDEX ( '%[^pattern]%' , expression )

    eg: PATINDEX ( '%[^0]%' , '000100101010' ) --返回4
 

 模糊查询的方式与LIKE用法相似,但LIKE只能判断是否存在,不能返回具体位置;

 1 按照结尾查询,指定字符串前面模糊查询,结尾一致就返回结尾的位置,否则返回0;
    PATINDEX ( '%pattern' , expression): 
    PATINDEX ( '%950' ,'0000163738954950')则返回950首次出现的9的位置11

 2 按照开始查询,指定字符串后面模糊查询,开头一致就返回1,否则直接返回0;
    PATINDEX ( 'pattern%' , expression ):
 3 指定字符串前后模糊查询
    PATINDEX ( '%pattern%' , expression )

 此Patindex函数可以与substring函数结合在取子字符串;

eg: a = '00000010284747',输出第一位不是0的子字符串;
SUBSTRING(a,(PATINDEX('%[^0]%',a)),LEN(a))
输出为10284747


eg: a = '00000010284747',输出2之后的子字符串;
SUBSTRING(a,(PATINDEX('%[2]%',a)),LEN(a))
输出为284747
  • 与case when 函数结合使用,去前导0的函数:

如果物料号matnr字段是纯数字号,则输出去前导0的物料号:如00000123456 则输出123456;否则原号输出;

 case ISNUMERIC(d.MATNR)
 when 1 then SUBSTRING(d.matnr,(PATINDEX('%[^0]%',d.matnr)),LEN(d.matnr))
 when 0 then d.matnr  
 end

 3. Charindex函数

       返回字符或者字符串在另一个字符串中的起始位置,为一个整数,若没找到,则返回0;与patindex的区别是: expression1无通配符,为具体的字符串;

CHARINDEX( expression1 , expression2 ,[ start_location ] )

expression1:  是要到expression2中寻找的字符;
start_location: 在 expression2 中搜索 expression1 时的起始字符位置;
如果没有给定 start_location,则将从 expression2 的起始位置开始搜索;

4. 聚合函数

聚合函数指的是对一组值进行计算,并返回单一的值;常见的聚合函数有SUM()、Min()、Max()、AVG()、Count(); 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值