PostgreSQL學習筆記(四):運算子&函式
阿新 • • 發佈:2019-01-08
文章目錄
1 運算子&函式
1.1 運算子
1.1.1 算數運算子
| ---------------- | ---------- |
| + | 加 |
| - | 減 |
| * | 乘 |
| / | 除 |
| % | 求餘 |
1.1.2 關係運算符
運算子 | 作用 |
---|---|
= | |
<> (!=) | |
> | |
>= | |
< | |
<= | |
LEAST | 返回最小值 |
GREATEST | 返回最大值 |
IN/NOT IN | |
BETWEEN…AND… | |
LIKE |
1.1.3 邏輯運算子
運算子 | 作用 |
---|---|
NOT | |
AND | |
OR |
1.2 函式
1.2.1 數學函式
函式 | 說明 |
---|---|
ABS(X) | 絕對值 |
PI(x) | 圓周率 |
SQRT(X) | 平方根 |
MOD(X,Y) | 求餘 |
CEIL(X) | 不小於X的最小整數 |
FLOOR(X) | 不大於X的最大整數 |
ROUND(X)/ROUND(X,Y) | 四捨五入,如果Y有值,保留Y小數位 |
POWER(X,Y) | X的Y次方 |
1.2.2 字串函式
函式 | 說明 |
---|---|
CHAR_LENGTH(STR) | 獲取字串長度 |
LENGTH(STR) | 獲取字串位元組長度。一個漢字3位元組,數字字母1位元組 |
CONCAT(STR1,STR2,…) | 連線字串 |
CONCAT_WS(WS,STR1,STR2,…) | 連線字串,字串中間中間用ws的值連線 |
LEFT(STR,N) | 獲取str從左數n長度的字串,n從1開始 |
RIGHT(STR,N) | 獲取str從右數n長度的字串,n從1開始 |
LPAD(STR,N,PADSTR) | 左補白,如果str不滿n長度,則在左邊補上字串 |
RPAD(STR,N,PADSTR) | 右補白,如果str不滿n長度,則在右邊補上字串 |
TRIM(STR)/RTRIM(STR)/LTRIM(STR) | 去除空白 |
REPEAT(STR,N) | 重複n次形成的字串 |
REPLACE(STR,BEFORESTR,AFTERSTR) | 替換字串 |
SUBSTRING(STR,N,LEN) | 從str中第n個位置開始擷取len長度的字串 |
1.2.3 日期和時間
-
獲取當前時間
select current_time;--帶時區 select localtime;--不帶時區
-
獲取當前日期+時間
select current_timestamp; select localtimestamp; select now();
-
提取日期中的日子
select extract(day from timestamp '2018-12-21 12:00:00');
-
提取日期中的月份
select extract(month from timestamp '2018-12-21 12:00:00');
-
提取日期中的年份
select extract(year from date '2012-12-12');
-
提取日期是一年中第幾天
select extract(doy from date '2012-12-12');
-
提取日期是一週中的星期幾
select extract(dow from date '2012-12-12');
-
提取日期是第幾個季度
select extract(quarter from date '2012-12-12');
-
計算日期+/-間隔天數
select date '2012-12-12' + integer '10';
-
計算日期+/-間隔小時
select date '2012-12-12' + interval '10 hour';
-
計算日期+/-指定時間
select date '2012-12-12' + time '06:00'
-
計算日期時間+/-間隔時間
select timestamp '2012-12-12 12:00:01' + interval '10 hours';
-
計算兩個日期之間的間隔天數
select date '2012-12-12' - date '2012-10-12';
1.2.4 條件表示式
-
CASE VALUE WHEN V1 THEN R1 [WHEN V2 THEN R2][...][ELSE RN] END
類似於Oracle的decode函式,如果v1=value,返回r1;如果v2=value,返回r2;否則返回rn。
-
case when v1 then r1 [when v2 then r2][...][else rn] end
和java的case相同。
1.2.5 系統函式
-
獲取當前登陸使用者名稱
select user,current_user;
-
md5加密
select md5('hello world');
-
encode加密
select encode('hello world','123456');
123456是加密編碼
-
decode解密
select decode(encode('hello world','123456'),'123456');
-
資料型別轉換
select cast(100 as varchar(12));