文章目錄
首先了解SQL函數的問題:不可移植
真是奇葩的情況。。這就是商業的百花齊放的負面作用了。如果只有開源軟件就不會這樣了,大家只會儘量保持一致保持兼容。
由於各個DBMS對各種功能模塊的函數實現不一樣,所以如果用函數,換一個DBMS就要重寫用函數部分的代碼。不用函數,只用基本語句實現起來又複雜。
大多數SQL實現支持的函數類型
文本處理函數
之前的trim,rtrim, ltrim函數都是文本處理函數
這個SOUNDEX好玄幻的樣子,這個算法太牛逼了,有人工智能內味兒
示例1:upper函數,轉換爲大寫
select vend_name, upper(vend_name) as vend_upcase
from vendors
order by vend_name;
注意計算字段是在select語句中的
示例2:soundex函數
select cust_name, cust_contact
from customers
where cust_contact = 'Michael Green';
select cust_name, cust_contact
from customers
where soundex(cust_contact) = soundex('Michael Green');
這樣子名字輸錯一點點也沒關係
日期和時間函數:可移植性最差
先不管其他DBMS了,只管mysql
select order_num,order_date
from orders
where year(order_date) = 2012;
數值函數:最一致統一的函數,但使用沒有日期函數和文本函數頻繁
系統函數
總結
- 牛逼的soundex文本處理算法,可以檢測發音相似的文本
- year函數從日期中提取年
- 日期和時間函數的移植性最差
- 由於很多函數在不同DBMS的實現不同,所以到時候需要自己看相應DBMS的官方文檔,並要有良好的註釋習慣,不要給後人挖坑,或者被後人罵
- 函數在格式化,對數據進行處理和過濾上很有用