OceanBase 數(shù)值格式化

2021-06-29 15:04 更新

數(shù)值格式化指定了存儲(chǔ)在數(shù)據(jù)庫(kù)中的定點(diǎn)數(shù)和浮點(diǎn)數(shù)的格式。

函數(shù)中的數(shù)值格式化

以下數(shù)值數(shù)據(jù)類型轉(zhuǎn)換函數(shù)使用了數(shù)值格式化:

  • 當(dāng)表達(dá)式、條件、SQL 函數(shù)和 SQL 語句中出現(xiàn) ?NUMBER?,?BINARY_FLOAT? 或 ?BINARY_ DOUBLE? 時(shí),且您需要它們的值轉(zhuǎn)換為 ?VARCHAR2? 數(shù)據(jù)類型時(shí),需要用 ?TO_CHAR? 函數(shù)的參數(shù)指定這些數(shù)值的格式。
  • 當(dāng)表達(dá)式、條件、SQL 函數(shù)和 SQL 語句中出現(xiàn) ?CHAR? 或 ?VARCHAR2? 時(shí),如果您需要將他們的值轉(zhuǎn)換為 ?NUMBER? 數(shù)據(jù)類型時(shí),需要用 ?TO_NUMBER? 函數(shù)的參數(shù)(暫不支持 ?NLS_NUMERIC_CHARACTERS?)指定這些數(shù)值的格式。如果您需要將他們的值轉(zhuǎn)換為 ?BINARY_FLOAT? 或 ?BINARY_DOUBLE? 時(shí),需要用 ?TO_BINARY_FLOAT? 和 ?TO_BINARY_DOUBLE? 函數(shù)的參數(shù)指定數(shù)值格式。

數(shù)值格式化會(huì)將數(shù)值四舍五入,并取有效數(shù)字位數(shù)。如果某個(gè)值的小數(shù)位數(shù),左邊的有效位數(shù)比格式中指定的位數(shù)高,則用 ?#? 代替該值。如果 ?NUMBER?的正值非常大且無法以指定的格式表示,則使用無窮大符號(hào)(?)替換該值。如果負(fù) ?NUMBER? 值非常小且無法用指定的格式表示,則使用負(fù)無窮大符號(hào)(-?)替換該值。

數(shù)值格式化的元素

與 Oracle 不同,OceanBase 數(shù)據(jù)庫(kù)數(shù)值格式化元素僅支持標(biāo)準(zhǔn)的數(shù)值格式。下表為 OceanBase 數(shù)據(jù)庫(kù)支持的數(shù)值格式化元素:

元素

示例

說明

.(小數(shù)點(diǎn))

99.99

返回一個(gè)小數(shù),且小數(shù)點(diǎn)在指定位置。

限制條件:在數(shù)字格式化中,您只能指定一個(gè)小數(shù)點(diǎn)。

0

0999 9990

0999 返回前導(dǎo)零。9990 返回尾隨零。

9

9999

返回具有指定位數(shù)的值。如果為正,則返回帶有有前導(dǎo)空格的數(shù);如果為負(fù),則返回前導(dǎo)負(fù)數(shù)。前導(dǎo)零返回 0,除了零值,定點(diǎn)數(shù)的小數(shù)部分返回零。

如果省略格式參數(shù),會(huì)將數(shù)值轉(zhuǎn)為足夠長(zhǎng)的 ?VARCHAR2? 以保留其所有的有效數(shù)字。

示例

執(zhí)行以下語句:

SELECT TO_CHAR(0, '99.99') FROM DUAL;

查詢結(jié)果如下:

+--------------------+
| TO_CHAR(0,'99.99') |
+--------------------+
|    .00             |
+--------------------+

下表顯示了對(duì)不同數(shù)值的 number 按照格式化元素 'fmt' 查詢得到的結(jié)果。

SELECT TO_CHAR(number, 'fmt')  FROM DUAL;

number

'fmt'

Result

0

99.99

'.00'

+0.1

99.99

'.10'

-0.2

99.99

'-.20'

0

90.99

'0.00'

+0.1

90.99

'0.10'

-0.2

90.99

'-0.20'

0

9999

'0'

1

9999

'1'

+123.456

999.999

'123.456'

-123.456

999.999

'-123.456'

當(dāng)省略'fmt'參數(shù)的時(shí)候:

SELECT TO_CHAR(123.456) FROM DUAL;

顯示結(jié)果如下:

+------------------+
| TO_CHAR(123.456) |
+------------------+
| 123.456          |
+------------------+

當(dāng)? TO_CHAR ?結(jié)果超過 40 字節(jié),或者傳入?yún)?shù)為 binary_double/binary_float 類型時(shí),結(jié)果將被轉(zhuǎn)為科學(xué)計(jì)數(shù)法。

例如:

SELECT TO_CHAR(12355555555555555555555555555555555555555555555555) FROM DUAL;

顯示結(jié)果如下:

+-------------------------------------------------------------+
| TO_CHAR(12355555555555555555555555555555555555555555555555) |
+-------------------------------------------------------------+
| 1.2355555555555555555555555555555556E+49                    |
+-------------------------------------------------------------+


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)