1.ROW_NUMBER() OVER()函数用法:oracle的rownum
从1开始,为每一条分组记录返回一个数字
1)row_number() over(order by xlh desc) 先把xlh列降序,然后按照降序记录序号
2)row_number() over(partition by col1 order by col2 desc)
先按col1分组,在分组内根据col2排序
2.类似oracle dual
SYSIBM.SYSDUMMY1 或 values
select CURRENT DATE from sysibm.sysdummy1;
或 VALUES CURRENT DATE;
3.to_char()日期转字符串,和Oracle一样 一般转字符串用 char()
4.DOUBLE()、FLOAT()如果参数是一个数字表达式,返回与其对应的浮点数,否则返回错误代码
5.CAST是DB2或Oracle中强制类型转换函数 CAST ( expression AS data_type )
如:CAST ( id AS varchar(10) ) 或 cast(id AS decimal (8, 4))
INT() 返回整型常量中的数字、字符串或者日期、时间的整数表示
HEX() 返回一个字符串的值的16进制表示。
-------- 数字函数 start--------
1.abs() absval():取绝对值
2.向上取整/向下取整数 ceil、ceiling/floor
3.求M的n次幂:power(M,n)
4.rand()随机数 - 0和1之间的浮点数
5.round(m,n) 四舍五入(n小数点几位)
6.trunc(m,n)或truncate() 数值截取函数
trunc(873.726,2)--873.72
trunc(873.726,-2)--800 trunc(873.726,-2)=0
类似函数: decimal(express,length,sacle) ---DEC
DEC(VALUES1,15,2) = cast(VALUES1 as decimal(15,2))
-------- 数字函数 end--------
-------- 字符串函数 start--------
1.substr() 截取字符串
substr(arg1,pos,<length>)
返回arg1中pos位置开始的length个字符,如果length没有值,则返回从pos位置开始后的字符
2.value() = oracle nvl()
value(exp1,exp2);exp1为空则返回exp2否则返回exp1
3.coalesce() 类似 value()
coalesce(arg1,arg2...) 返回第一个非null参数
4.ltrim() rtrim() trim()
去掉左侧或右侧的空格 左右空格
5.concat(arg1,arg2) 返回两个字符串连接
6.REPEAT(ARG1,NUM_TIMES):返回ARG1被重复NUM_TIMES次的字符串。
values LOCATE('a',3); -- aaa
7.SPACE(SIZE):返回一个包含SIZE个空格的字符串
8.REPLACE(EXP1,EXP2,EXP3):用EXP3代替EXP1中所有的EXP2
values REPLACE('ROMANND','NND','CCB') -- ROMACCB
9.insert(arg1,pos,size,arg2)
返回一个字符串,将arg1从pos处删除size个字符,将arg2插入
10.length() 返回参数长度
11.lcase() lower() 小写形式
ucase() upper() 大写形式
.STRIP(str1,exp,str2) 要截去的单个字符常量中指定字符
其中exp有
B:BOTH表示两头
L:LEADING表示去头
T:TRAILING表示去尾
strip('00000999000',t,'0');--去掉尾的'0'
.left() right()
left(arg,length) right(arg,length)
返回arg最左边、右边的length个字符
.LOCATE(ARG1,ARG2,<POS>)
在ARG2中查找ARG1第一次出现的位置,如果指定POS,则从ARG2的POS处开始查找ARG1第一次出现的位置。
values LOCATE('a','NaME'); -- 2
.POSSTR(EXP1,EXP2):POSSTR函数返回EXP2在EXP1中的位置
-------- 字符串函数 end--------
-------- 日期 start--------
values char(current date),char(current time),char(current timestamp);
2017-05-18
14.44.26
2017-05-18-14.44.26.453000
日期减 1年/月/日/ current date - 1 year/month/day(加s效果一样)
1.DATE(ARG); --返回当天零时
values DATE('2005-06-12 18:20:20');--等于DATE('2005-06-12') 返回都是2005/6/12 0:00:00时间点
TIMESTAMP(ARG); --返回具体秒
values TIMESTAMP('2005-06-12 16:24:18');--时间点就是 2005-06-12 16:24:18
2.TIME(ARG); --返回当天具体时间
values TIME('2005-06-12 16:24:18');--等于TIME('16:24:18')最后都为 16:24:18
------返回具体年月日------
3.YEAR(ARG); -- 年/月/日/时/分/秒 MONTH(ARG) DAY(ARG) HOUR(ARG) MINUTE(ARG) SECOND(ARG)
select YEAR('2005-06-12 16:24:18') from sysibm.sysdummy1; --YEAR('2005-06-12') 2005
4.DAYOFWEEK(ARG);--字符串在周内的天值(从周日开始1到7)。DAYOFWEEK_ISO(从周一开始1到7)
QUARTER(ARG);--一年的第几季度 ARG既可以是时间,也可以是时间字符串
values QUARTER('2005-06-12 16:24:18');--2
WEEK(ARG);--一年的第几周 ARG既可以是时间,也可以是时间字符串
values WEEK('2005-01-01');--1
DAYS(ARG);--从0001-01-01以来的天数。
values DAYS(CURRENT DATE);
DAYOFYEAR(ARG);--字符串在年内的天值。
DAYNAME(ARG);-- MONTHNAME() 字符串是星期几(月份:May) Thursday
--求两个日期的天数
VALUES DAYS(DATE('2009-10-1')) - DAYS(DATE('2008-10-1'));
VALUES DAYS('2009-10-2') - DAYS('2009-10-1 10:40:15.000000');
VALUES DAYS(TIMESTAMP('2009-10-2 10:23:15.000005')) - DAYS(TIMESTAMP
('2009-10-1 10:40:15.000000'));
-------- 日期 end--------
从1开始,为每一条分组记录返回一个数字
1)row_number() over(order by xlh desc) 先把xlh列降序,然后按照降序记录序号
2)row_number() over(partition by col1 order by col2 desc)
先按col1分组,在分组内根据col2排序
2.类似oracle dual
SYSIBM.SYSDUMMY1 或 values
select CURRENT DATE from sysibm.sysdummy1;
或 VALUES CURRENT DATE;
3.to_char()日期转字符串,和Oracle一样 一般转字符串用 char()
4.DOUBLE()、FLOAT()如果参数是一个数字表达式,返回与其对应的浮点数,否则返回错误代码
5.CAST是DB2或Oracle中强制类型转换函数 CAST ( expression AS data_type )
如:CAST ( id AS varchar(10) ) 或 cast(id AS decimal (8, 4))
INT() 返回整型常量中的数字、字符串或者日期、时间的整数表示
HEX() 返回一个字符串的值的16进制表示。
-------- 数字函数 start--------
1.abs() absval():取绝对值
2.向上取整/向下取整数 ceil、ceiling/floor
3.求M的n次幂:power(M,n)
4.rand()随机数 - 0和1之间的浮点数
5.round(m,n) 四舍五入(n小数点几位)
6.trunc(m,n)或truncate() 数值截取函数
trunc(873.726,2)--873.72
trunc(873.726,-2)--800 trunc(873.726,-2)=0
类似函数: decimal(express,length,sacle) ---DEC
DEC(VALUES1,15,2) = cast(VALUES1 as decimal(15,2))
-------- 数字函数 end--------
-------- 字符串函数 start--------
1.substr() 截取字符串
substr(arg1,pos,<length>)
返回arg1中pos位置开始的length个字符,如果length没有值,则返回从pos位置开始后的字符
2.value() = oracle nvl()
value(exp1,exp2);exp1为空则返回exp2否则返回exp1
3.coalesce() 类似 value()
coalesce(arg1,arg2...) 返回第一个非null参数
4.ltrim() rtrim() trim()
去掉左侧或右侧的空格 左右空格
5.concat(arg1,arg2) 返回两个字符串连接
6.REPEAT(ARG1,NUM_TIMES):返回ARG1被重复NUM_TIMES次的字符串。
values LOCATE('a',3); -- aaa
7.SPACE(SIZE):返回一个包含SIZE个空格的字符串
8.REPLACE(EXP1,EXP2,EXP3):用EXP3代替EXP1中所有的EXP2
values REPLACE('ROMANND','NND','CCB') -- ROMACCB
9.insert(arg1,pos,size,arg2)
返回一个字符串,将arg1从pos处删除size个字符,将arg2插入
10.length() 返回参数长度
11.lcase() lower() 小写形式
ucase() upper() 大写形式
.STRIP(str1,exp,str2) 要截去的单个字符常量中指定字符
其中exp有
B:BOTH表示两头
L:LEADING表示去头
T:TRAILING表示去尾
strip('00000999000',t,'0');--去掉尾的'0'
.left() right()
left(arg,length) right(arg,length)
返回arg最左边、右边的length个字符
.LOCATE(ARG1,ARG2,<POS>)
在ARG2中查找ARG1第一次出现的位置,如果指定POS,则从ARG2的POS处开始查找ARG1第一次出现的位置。
values LOCATE('a','NaME'); -- 2
.POSSTR(EXP1,EXP2):POSSTR函数返回EXP2在EXP1中的位置
-------- 字符串函数 end--------
-------- 日期 start--------
values char(current date),char(current time),char(current timestamp);
2017-05-18
14.44.26
2017-05-18-14.44.26.453000
日期减 1年/月/日/ current date - 1 year/month/day(加s效果一样)
1.DATE(ARG); --返回当天零时
values DATE('2005-06-12 18:20:20');--等于DATE('2005-06-12') 返回都是2005/6/12 0:00:00时间点
TIMESTAMP(ARG); --返回具体秒
values TIMESTAMP('2005-06-12 16:24:18');--时间点就是 2005-06-12 16:24:18
2.TIME(ARG); --返回当天具体时间
values TIME('2005-06-12 16:24:18');--等于TIME('16:24:18')最后都为 16:24:18
------返回具体年月日------
3.YEAR(ARG); -- 年/月/日/时/分/秒 MONTH(ARG) DAY(ARG) HOUR(ARG) MINUTE(ARG) SECOND(ARG)
select YEAR('2005-06-12 16:24:18') from sysibm.sysdummy1; --YEAR('2005-06-12') 2005
4.DAYOFWEEK(ARG);--字符串在周内的天值(从周日开始1到7)。DAYOFWEEK_ISO(从周一开始1到7)
QUARTER(ARG);--一年的第几季度 ARG既可以是时间,也可以是时间字符串
values QUARTER('2005-06-12 16:24:18');--2
WEEK(ARG);--一年的第几周 ARG既可以是时间,也可以是时间字符串
values WEEK('2005-01-01');--1
DAYS(ARG);--从0001-01-01以来的天数。
values DAYS(CURRENT DATE);
DAYOFYEAR(ARG);--字符串在年内的天值。
DAYNAME(ARG);-- MONTHNAME() 字符串是星期几(月份:May) Thursday
--求两个日期的天数
VALUES DAYS(DATE('2009-10-1')) - DAYS(DATE('2008-10-1'));
VALUES DAYS('2009-10-2') - DAYS('2009-10-1 10:40:15.000000');
VALUES DAYS(TIMESTAMP('2009-10-2 10:23:15.000005')) - DAYS(TIMESTAMP
('2009-10-1 10:40:15.000000'));
-------- 日期 end--------