天津南大通用数据技术股份有限公司(GBASE)成立于2004年,始终坚持国产数据库的自主研发和推广,为用户提供全栈国产数据库产品和服务。
南大通用是国家级高新技术企业、国家规划布局内重点软件企业、信创工委会成员企业(0084),是目前国内专注于数据库产品研发,并且在金融、电信行业得到规模化应用的独立数据库服务商。
部分项目的实际应用,在mysql数据库向GBase 8s数据库的迁移过程中,部分函数之间的差异会给客户使用过程中带来一些困惑,稍作整理。
1、ascii:返回ascii码
2、substr:截取字符串
3、instr:字符串查找
4、concat/||:字符串拼接
5、length:字符串长度
6、lengthb:字符串长度byte
7、lower:字符串转小写
8、upper:字符串转大写
9、ltrim:字符串左边截取
10、rtrim:字符串右边截取
11、trim:字符串两边截取
12、replace:字符串替换
13、lpad:字符串左边填充
14、rpad:字符换右边填充
15、to_number:字符串转换为number类型
16、to_date:字符串转换为日期类型
17、select CAST(today::INTEGER::DECIMAL AS MONEY(16,2)) from dual;
18、select TO_CHAR(today, ‘yyyymmdd’) from dual;
19、select TO_DATE(‘20200508’, ‘yyyy-mm-dd’) from dual;
20、select TO_NUMBER(‘RMB100.00’) from dual;
21、abs(x):返回x的绝对值
22、floor(x):返回小于等于x的最大整数值
23、mod(x,y):返回x除以y的余数
24、power(x,y):返回x的y次幂
25、round(value,precision):四舍五入,根据给定的精度(precision)输入数值。
26、sign(x):返回x的正负标志
27、sqrt(x):返回x的平方根
28、trunc(value,precision)按精度(precision)截取某个数字,不进行舍入操作。
29、ceil (value) 产生大于或等于指定值(value)的最小整数。
mysql到gbase时间语法的转换例子:
date_format(Date_Sub(NOW(), interval floor(rand()*60) day),’%Y-%m-%d’) create_date
转换为
(current - floor(rand()*60) units day ) create_date
返回值"年-月":
select date_format(current,’%Y-%m’) date from dual;
A表中B,C两个时间字段,计算两个字段相差多少分钟,小时,天。
计算时间差,并换算成某个单位
select (((B - C)::interval minute(9) to minute)||’’)::integer from systables first 1;
select (B - C)::interval hour(9) to second from systables first 1;
select (B - C)::interval day(9) to day from systables first 1;
这个sql可以查上一个sql受影响的行数
select first 1 dbinfo(‘sqlca.sqlerrd2’) from dual;
dbinfo函数:
用它实现int类型向date数据类型转换:
例如:
select dbinfo(‘utc_to_datetime’,1111111111) from dual;
GBase 8s语法
getdeptchildids函数创建:
find_in_set:
create function find_in_set(str varchar(255),strlist lvarchar(10000)) returns int; define currp int; -- 当前位置 define lastp int; -- 上次位置 define sepnum int; define strlen int; define strtmp lvarchar(10000); let lastp = 1; let sepnum = 0; let strtmp = strlist || ","; -- 追加一个分隔符',' let strlen = length(strtmp); FOR currp = 1 TO strlen IF substr(strtmp,currp,1) = ',' THEN let sepnum = sepnum + 1; IF substr(strtmp,lastp,currp - lastp) = str THEN RETURN sepnum; END IF; let lastp = currp + 1; END IF; END FOR; RETURN 0; end function;
复制
group_concat:
create aggregate group_concat with ( init = str_sum_init, iter = str_sum_iter, combine = str_sum_combine );
复制
getdeptchildids:
CREATE FUNCTION "gbasedbt".getdeptchildids(deptId BIGINT)RETURNS varchar(4000) define result varchar(4000); define temp_parent_id varchar(4000); let result= '$'; let temp_parent_id= deptId||''; while temp_parent_id is not null let result=result||','||temp_parent_id ; select group_concat(a.dept_id) into temp_parent_id from sys_dept a where find_in_set(parent_id,temp_parent_id)>0; end while; return result; END FUNCTION;
复制
datediff(dt1,dt1)函数,两个日期的差值
– datediff
create function datediff(p1 datetime year to fraction(5), p2 datetime year to fraction(5)) returns int with (not variant); on exception return null; end exception; return substr(p1 - p2,1,9)::int; end function;
复制
date_format(dt,fmt)函数,格式化日期时间
– date_format
create function date_format(p1 datetime year to fraction(5), p2 varchar(20)) returns varchar(40) with (not variant); define fmt varchar(20); on exception return null; end exception; let fmt = replace(p2,'i','M'); let fmt = replace(fmt,'s','S'); return gbase_to_char(p1,fmt); end function;
复制
评论
