iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 14
0

昨天已經將大部分常用的 SQL 指令做一個簡單的說明,接下來我們接著聊一聊由資料庫系統所提供的系統函數。這些系統函數在我們寫 Store Procedure 時,提供很多強大的功能,方便我們整合到我們的 SQL 程式中使用。不同的資料庫都會有自己的一套系統函數,我之前有整理過常用系統函數的比較一覽表,請參考下面的列表說明。

函式名 MS-SQL MySQL PostgreSQL
聚合函數
取某欄位的平均值 avg() avg(col) avg(expression)
計算筆數 count() count(col) count(xx)
某個欄位值最大值 max() max(col) max(expression)
某個欄位值的最小值 min() min(col) min(expression)
某個欄位取值的總和 sum() sum(col) sum(expression)
字串類
取ascii碼 ascii(char) ascii(char) ascii(string)
根據ascii碼取字元 char(ascii) chr() chr(int)
轉化為指定的資料類型 cast() cast() to_char()
將s1,s2...,sn連接成字串 + concat(s1,s2...,sn) concat(x,y,x)
返回字串的位元長度 datalength(Char_expr) data_length(str) char_length(string)
返回字串長度 len() length(s) length(string)
取子字串 substring(exp,start,len) substring() substring()
返回字串右邊 x 個字元 right(str,x) right(str,x) right(str text, n int)
返回字串左邊 x 個字元 left(str,x) left(str,x) left(str text, n int)
轉爲大寫 upper(str) upper(str) upper(string)
轉爲小寫 lower(str) lower(str) lower(string)
生成n個空格 space(n)
複制字串n 次 replicate(str,n) repeat(str,src,rplcstr) repeat()
反轉字串 reverse(str) reverse(str) reverse(str)
字串代替 replace() replace() replace()
指定位置插入指定字串 stuff(str,x,y,instr) insert(str,x,y,instr)
取掉左方空格 ltrim(char_expr) ltrim(str) ltrim(str)
取掉右方空格 rtrim(char_expr) rtrim(str) rtrim(str)
返回str在sub的起始位置 charindex(substr,str) position(substr,str) strpos(str, substr)
條件式判斷 iif(bool,val_t,val_f) iif(bool,val_t,val_f)
若 null取第2個引數 isnull(bool,val_null) ifnull()
反斜線轉義str中的單引號 quote(str)
去除字串前後的所有空格 trim(str) trim(str)
日期格式化 convert() date_format(date,fmt) to_date(text, text)
比較字串s1和s2 strcmp(s1,s2)
固定字串長度(左或右) lpad or rpad lpad or rpad
數學類
求num絕對值 abs(num) abs(x) abs(x)
取指數 exp(float_expr) exp(x) exp(x)
返回x/y的模(餘數) mod() mod(x,y) mod(y, x)
隨機數産生器 rand([int_expr]) rand() random()
四捨五入 round(x,y) round(x,y) round(x,y)
平方根 sqrt(float_expr) sqrt(x) sqrt(x)
返回數字x截短為y位小數 truncate(x,y) trunc(x,y)
日期類
返回當前日期及時間 now() Now() now()
返回日期 getdate() current_date() current_date
返回當前的時間 current_time() current_time
返回日期加上 number dateadd(type,int,d_exp) date_add()/date_sub() date_part(text, times)
日期差 datediff(type,d1,d2) datediff(date1,date2)
傳回日期欄的西元年 year(date) year(date)
傳回日期欄的月 month(date) dayofmonth(date)
傳回日期欄的日 day(date) dayname(date)
傳回日期欄是星期幾 dayofweek(date)
返回日期為一年中第幾 week(date)
系統函數
數據庫名 db_name() database() current_database()
伺服器的版本 version() version()

善用上面這些系統的函數,可以大幅提升我們撰寫SQL的效率。那如果找不到所需的函數時該怎麼辦? 當然就只能自己寫了,限於篇幅我就不在此繼續說明。在接下來的進階說明,如果有機會,我們再來深入聊聊。

也就是因為資料庫允許自行開發所需的函數,讓SQL 更接近一種程式語言,如果想要深入的運用資料庫,就應該要下功夫努力學習,今天就聊到這邊,我們明天繼續努力。


上一篇
Day13:常用的 SQL 語法簡介 I
下一篇
Day15:進階的 SQL 語法簡介 I
系列文
以資料庫為開發核心,利用通用 API 玩轉後端資料存取的概念與實作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言