在 PostgreSQL 中将十进制数转换为字母
Convert a decimal number to a letter in PostgreSQL
我有一个函数可以将整数转换为字母,我想优化它以将小数转换为字母。
函数:https://dbfiddle.uk/?rdbms=postgres_12&fiddle=22a67dedd54291d7ffb527e2f9d482ca
示例:2053.21
我试过了:
select concat(en_function(2053), ' point', en_function(21))
但这不是一个好的方法
我想输入 select en_function(5423.21)
和 return“五千四百二十三点二十一点”
我该怎么做?
最简单的方法是编写一个包装函数,并在该包装函数内为数字的实部和小数部分调用原始函数两次:
CREATE OR REPLACE FUNCTION en_function2(nombre decimal)
RETURNS text
AS $BODY$
select case when substring(nombre::text from '[.]') is null or replace(substring(nombre::text from '[.][0-9]*'),'.','')::int = 0 then en_function(nombre)
else concat(en_function(replace(substring(nombre::text from '[0-9]*[.]'),'.','')::decimal), ' point ', en_function(replace(substring(nombre::text from '[.][0-9]*'),'.','')::decimal))
end
$BODY$ LANGUAGE sql
select en_function2(2053.21);
db<>fiddle here
我有一个函数可以将整数转换为字母,我想优化它以将小数转换为字母。
函数:https://dbfiddle.uk/?rdbms=postgres_12&fiddle=22a67dedd54291d7ffb527e2f9d482ca 示例:2053.21
我试过了:
select concat(en_function(2053), ' point', en_function(21))
但这不是一个好的方法
我想输入 select en_function(5423.21)
和 return“五千四百二十三点二十一点”
我该怎么做?
最简单的方法是编写一个包装函数,并在该包装函数内为数字的实部和小数部分调用原始函数两次:
CREATE OR REPLACE FUNCTION en_function2(nombre decimal)
RETURNS text
AS $BODY$
select case when substring(nombre::text from '[.]') is null or replace(substring(nombre::text from '[.][0-9]*'),'.','')::int = 0 then en_function(nombre)
else concat(en_function(replace(substring(nombre::text from '[0-9]*[.]'),'.','')::decimal), ' point ', en_function(replace(substring(nombre::text from '[.][0-9]*'),'.','')::decimal))
end
$BODY$ LANGUAGE sql
select en_function2(2053.21);
db<>fiddle here