|| 实现sql的字符串的连接
拼接字符串:
select shejdd || shijdd||qujdd||hddd dd from table_name;
查询表中的shejdd,shijdd,qujdd,hddd字段将查询结果拼接为一个叫dd的字段
例子:
select 'hello'||'world'||' ABC';
结果:helloworld ABC
sql实现手机号脱敏
select substring('12312345678',1,3) ||'****'||substring('12312345678',8,4) as sjhm;
结果:123****5678
substring(str,index,length);
str表示需要被分割的字符串
index表示下标,默认从下标1开始
length表示需要分割的字符串的长度
sql使用正则表达式替换掉查询中的指定文字
select regexp_replace (regexp_replace('山东省济南市历下区', '^山东省', ''),'区$','');
结果:济南市历下
regexp_replace(text,pattern text,replacement text);
介绍:将匹配POSIX正则表达式的子串替换为新文本的功能。若没有匹配pattern text,返回原字符串。若匹配,则返回的text串里面的被匹配的字符串将被replacement text替换后的字符串。
按照每小时统计数据表某段时间数据变化量
select to_char(fwsj,'yyyy-mm-dd hh24'),count(*) from table_name
where fwsj>'2020-03-06 12:00:00' and fwsj <now()
GROUP BY to_char(fwsj,'yyyy-mm-dd hh24')
order by to_char(fwsj,'yyyy-mm-dd hh24') asc;
将日期转为时间戳
SELECT EXTRACT(epoch FROM CAST('2017-12-06 00:17:10' AS TIMESTAMP));
结果:1512519430
作用:可用作查询条件来比较时间大小
时间戳转日期
SELECT TO_TIMESTAMP(1512490630);
结果:2017-12-06 00:17:10+08
这种转化的日期最后会带上时区
to_date(text,text)说明,转日期不带时间
select to_date('2019-01-15 18:33:41','yyyy-MM-dd hh24:mi:ss');
结果为:2019-01-15
将字符串转为年月日的日期,不包含时分秒
::的使用说明
例子1:
select '123'::NUMERIC as number;
结果1:
例子2:
select '123' as number;
对比看出:
例子1是数字的123,例子2是文本的123。
::作用:
将一种类型的常量转化成指定类型的常量
例子1等价于以下两种写法
select cast('123' as NUMERIC);
select NUMERIC'123';
当然如果是’123a’这种不能转换的,SQL会报错
::NUMERIC实现两个整型数字的相除,四舍五入保留指定的小数位
错误用法:
select round(400/300,4);
结果为:1
两个integer类型的数字相除,结果保留整数部分
正确用法:
select round(400::NUMERIC/300::NUMERIC,4);
结果为:1.3333
转化成浮点数,相除的结果为浮点数