postgresql 一些SQL使用技巧

|| 实现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:
postgresql 一些SQL使用技巧_第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
转化成浮点数,相除的结果为浮点数

你可能感兴趣的:(postgresql,postgresql)