- 两个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();