500 Miles 是一首老歌.筆者以前在鳳山受訓時打夜間教練時,曾經望著遠處的燈光,
想起了這首歌.時光匆匆已過數十寒暑,現在用 youtube 就可以聽以前蠻多老歌的,
一邊聽,一邊想著把 500 Miles,換算成公里. 我的 Postgresql 陪著我聽歌,
也幫我換算出來了.
數與量是不同的,量是有單位的.不同單位間的換算在我們發展系統時,若有一個標準的套件,
就比較能確保穩定性.關於單位有國際標準的,請參考以下鏈結
https://en.wikipedia.org/wiki/International_System_of_Units
https://en.wikipedia.org/wiki/Binary_prefix
幸運的是 Unix 有發展出轉換工具,後續 GNU版本也有持續發展,
https://www.gnu.org/software/units/
Mac 可以透過 brew install gnu-units 安裝,
Windows 可以在這裡找到
http://ftp.gnu.org/gnu/units/windows/
使用互動模式
| => units
586 units, 56 prefixes
You have: 500 miles
You want: km
* 804.672
/ 0.0012427424
--
但若是大量的資料,能在資料庫內處理,就更理想了.
在 Postgresql 有這個 extension
https://github.com/df7cb/postgresql-unit
作者在 Debian 也有貢獻.
我們下載之後, unzip, make, make install
create extension unit;
這樣就安裝好了.
接下來測試看看
select '800 m'::unit + '500 m' as length;
+--------+
| length |
+--------+
| 1.3 km |
+--------+
select '1441 min'::unit as "1441 minutes";
+------------------+
| 1441 minutes |
+------------------+
| 1 d + 00:01:00 s |
+------------------+
select '3 | 4 min'::unit as "3/4 minutes";
+-------------+
| 3/4 minutes |
+-------------+
| 45 s |
+-------------+
select '128 km/h'::unit as "speed";
+----------------------+
| speed |
+----------------------+
| 35.5555555555556 m/s |
+----------------------+
set unit.byte_output_iec = on;
select '4 TB'::unit as disk_sold_as_4tb;
+----------------------+
| disk_sold_as_4tb |
+----------------------+
| 3.63797880709171 TiB |
+----------------------+
select '1 GiB'::unit @ 'MiB';
+----------+
| ?column? |
+----------+
| 1024 MiB |
+----------+
select '2 MB/min'::unit @ 'GB/d' as netspd1
, '2 MiB/min'::unit @ 'GiB/d' as netspd2;
+-----------+--------------+
| netspd1 | netspd2 |
+-----------+--------------+
| 2.88 GB/d | 2.8125 GiB/d |
+-----------+--------------+
select '500 mi'::unit as "500 Miles";
+------------+
| 500 Miles |
+------------+
| 804.672 km |
+------------+
這個套件還有許多強大的功能,等你來嘗試.
-----
轉眼已到30天,也該做一下結尾感言了.
好像有欠一個 計算sequence 的函數,還不夠完備的.
我想能夠讀完我這系列的,應該能夠處理一個簡單的正負數判斷,
結合絕對值函數的運算.若有疑問,也別擔心,我還蠻常在 ithelp
回答問題的.
也歡迎到 Postgresql.TW 社群.
感謝在本系列中有出場的: 我的朋友 胖達,玉面飛鷹.
被我拉來當例子出現的,搞笑談軟工的Teddy Chen.
還有 PHP 之父 Rasmus Lerdorf.
Postgresql-Unit 的 Christoph Berg.
hstore , ltree 的 Oleg Bartunov, Teodor Sigaev.
還有許多對Postgresql 有貢獻的人們.
當然也要感謝 天津風,島風,冬月還有她們的小夥伴.
本系列沒有在 index 及效能方面,有所著墨.著重在系統
內部表出發,進而探討基本的資料型態,以及一些特殊的資料
型態.今年就先介紹到此.
恭喜完賽!最近試著學習Postgresql,想用MS Access當前端,Postgresql作為後端資料庫,沒想到Postgresql這麼多功能!這系列真是精采!
謝謝,祝你學習順利愉快.