Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitabb1733

Browse files
committed
Add scale(numeric)
Author: Marko Tiikkaja
1 parent419400c commitabb1733

File tree

7 files changed

+105
-1
lines changed

7 files changed

+105
-1
lines changed

‎doc/src/sgml/func.sgml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -849,6 +849,19 @@
849849
<entry><literal>42.44</literal></entry>
850850
</row>
851851

852+
<row>
853+
<entry>
854+
<indexterm>
855+
<primary>scale</primary>
856+
</indexterm>
857+
<literal><function>scale(<type>numeric</type>)</function></literal>
858+
</entry>
859+
<entry><type>numeric</type></entry>
860+
<entry>scale of the argument (the number of decimal digits in the fractional part)</entry>
861+
<entry><literal>scale(8.41)</literal></entry>
862+
<entry><literal>2</literal></entry>
863+
</row>
864+
852865
<row>
853866
<entry>
854867
<indexterm>

‎src/backend/utils/adt/numeric.c

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2825,6 +2825,23 @@ numeric_power(PG_FUNCTION_ARGS)
28252825
PG_RETURN_NUMERIC(res);
28262826
}
28272827

2828+
/*
2829+
* numeric_scale() -
2830+
*
2831+
*Returns the scale, i.e. the count of decimal digits in the fractional part
2832+
*/
2833+
Datum
2834+
numeric_scale(PG_FUNCTION_ARGS)
2835+
{
2836+
Numericnum=PG_GETARG_NUMERIC(0);
2837+
2838+
if (NUMERIC_IS_NAN(num))
2839+
PG_RETURN_NULL();
2840+
2841+
PG_RETURN_INT32(NUMERIC_DSCALE(num));
2842+
}
2843+
2844+
28282845

28292846
/* ----------------------------------------------------------------------
28302847
*

‎src/include/catalog/catversion.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,6 @@
5353
*/
5454

5555
/*yyyymmddN */
56-
#defineCATALOG_VERSION_NO201601051
56+
#defineCATALOG_VERSION_NO201601052
5757

5858
#endif

‎src/include/catalog/pg_proc.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2361,6 +2361,8 @@ DESCR("exponentiation");
23612361
DATA(insert OID = 2169 ( powerPGNSP PGUID 12 1 0 0 0 f f f f t f i s 2 0 1700 "1700 1700" _null_ _null_ _null_ _null_ _null_numeric_power _null_ _null_ _null_ ));
23622362
DESCR("exponentiation");
23632363
DATA(insert OID = 1739 ( numeric_powerPGNSP PGUID 12 1 0 0 0 f f f f t f i s 2 0 1700 "1700 1700" _null_ _null_ _null_ _null_ _null_numeric_power _null_ _null_ _null_ ));
2364+
DATA(insert OID = 8888 ( scalePGNSP PGUID 12 1 0 0 0 f f f f t f i s 1 0 23 "1700" _null_ _null_ _null_ _null_ _null_ numeric_scale _null_ _null_ _null_ ));
2365+
DESCR("number of decimal digits in the fractional part");
23642366
DATA(insert OID = 1740 ( numericPGNSP PGUID 12 1 0 0 0 f f f f t f i s 1 0 1700 "23" _null_ _null_ _null_ _null_ _null_ int4_numeric _null_ _null_ _null_ ));
23652367
DESCR("convert int4 to numeric");
23662368
DATA(insert OID = 1741 ( logPGNSP PGUID 14 1 0 0 0 f f f f t f i s 1 0 1700 "1700" _null_ _null_ _null_ _null_ _null_ "select pg_catalog.log(10, $1)" _null_ _null_ _null_ ));

‎src/include/utils/builtins.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1022,6 +1022,7 @@ extern Datum numeric_exp(PG_FUNCTION_ARGS);
10221022
externDatumnumeric_ln(PG_FUNCTION_ARGS);
10231023
externDatumnumeric_log(PG_FUNCTION_ARGS);
10241024
externDatumnumeric_power(PG_FUNCTION_ARGS);
1025+
externDatumnumeric_scale(PG_FUNCTION_ARGS);
10251026
externDatumint4_numeric(PG_FUNCTION_ARGS);
10261027
externDatumnumeric_int4(PG_FUNCTION_ARGS);
10271028
externDatumint8_numeric(PG_FUNCTION_ARGS);

‎src/test/regress/expected/numeric.out

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1852,3 +1852,60 @@ select log(3.1954752e47, 9.4792021e-73);
18521852
-1.51613372350688302142917386143459361608600157692779164475351842333265418126982165
18531853
(1 row)
18541854

1855+
--
1856+
-- Tests for scale()
1857+
--
1858+
select scale(numeric 'NaN');
1859+
scale
1860+
-------
1861+
1862+
(1 row)
1863+
1864+
select scale(NULL::numeric);
1865+
scale
1866+
-------
1867+
1868+
(1 row)
1869+
1870+
select scale(1.12);
1871+
scale
1872+
-------
1873+
2
1874+
(1 row)
1875+
1876+
select scale(0);
1877+
scale
1878+
-------
1879+
0
1880+
(1 row)
1881+
1882+
select scale(0.00);
1883+
scale
1884+
-------
1885+
2
1886+
(1 row)
1887+
1888+
select scale(1.12345);
1889+
scale
1890+
-------
1891+
5
1892+
(1 row)
1893+
1894+
select scale(110123.12475871856128);
1895+
scale
1896+
-------
1897+
14
1898+
(1 row)
1899+
1900+
select scale(-1123.12471856128);
1901+
scale
1902+
-------
1903+
11
1904+
(1 row)
1905+
1906+
select scale(-13.000000000000000);
1907+
scale
1908+
-------
1909+
15
1910+
(1 row)
1911+

‎src/test/regress/sql/numeric.sql

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -983,3 +983,17 @@ select log(1.23e-89, 6.4689e45);
983983
select log(0.99923,4.58934e34);
984984
select log(1.000016,8.452010e18);
985985
select log(3.1954752e47,9.4792021e-73);
986+
987+
--
988+
-- Tests for scale()
989+
--
990+
991+
select scale(numeric'NaN');
992+
select scale(NULL::numeric);
993+
select scale(1.12);
994+
select scale(0);
995+
select scale(0.00);
996+
select scale(1.12345);
997+
select scale(110123.12475871856128);
998+
select scale(-1123.12471856128);
999+
select scale(-13.000000000000000);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp