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:
在這裏插入圖片描述
例子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
轉化成浮點數,相除的結果爲浮點數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章