2014-02-11 16 views
0

我想了解格式化HSQLDB select查詢以獲取人類可讀輸出的數字數據的最佳做法。 目標是能夠使用類似於C的printf()的格式來格式化數字。意思是,我希望能夠指定如何在HSQLDB中格式化數字 - printf()等效

  • 逗號分隔符每隔3 S.F.
  • #的小數點後的位數
  • 0小數點

爲了討論之前填充,我舉個例子:我在寫的HSQLDB一個存儲過程創建一個人類可讀的審計線索。我想的示例行是:

Time      Event 
----      ----- 
2014-02-10 14:54:10.855 Filled 50,000 at 13.3144 (66,5720.00 MXN), leaves 0. 

的數值從DB柱(整數和十進制)發起。但目前我使用CAST將這些轉換爲VARCHAR,然後使用||連接它們。實際的輸出是:

Filled 50000.0E0 at 13.3144E0 (665720.0E0 MXN), leaves 0.0E0 

我也擔心整個消息被截斷 - 我需要確保轉換後的數字的長度不超過事件列的允許大小。

所以我想聽聽人們在做這樣的事情時接近的是什麼。有一點可以想到,這可以寫在java存儲過程中,允許使用printf()。這是最好的方式,還是有一個很好的方式來在SQL中執行它?另外,爲了爭辯,我們假設這需要成爲數據庫的一部分(即,從外部查詢表格然後格式化數據不是一種選擇)。

回答

1

這可以寫成Java或SQL功能。

在SQL函數中,如果您將一個數字轉換爲DECIMAL(20,2),您將得到固定數量的2個小數點。強制轉換爲BIGINT不會產生小數點。當您將結果轉換爲VARCHAR(40)時,這將解決小數點問題。你需要編寫一個函數在字符串中插入逗號。 SUBSTRING函數可用於獲取字符串的部分和||運算符將它們與逗號連接起來。