瀚高数据库数据类型转换character转numeric

Posted 瀚高PG实验室

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了瀚高数据库数据类型转换character转numeric相关的知识,希望对你有一定的参考价值。

目录
环境
文档用途
详细信息

环境
系统平台:Linux x86-64 Red Hat Enterprise Linux 7
版本:4.5
文档用途
解决应用程序插入报错:”段 accounttype 的类型为 numeric, 但表达式的类型为 character Hint: 你需要重写或转换表达式 Position: 1463 Call getNextException to see other errors in the batch.”;

原因:数据库中没有character转numeric的转换。

详细信息
1.问题:

create table test_character2numeric(id bigserial,test numeric);

highgo=# insert into test_character2numeric(test) values ('1.00'::character);
错误:  字段 "test" 的类型为 numeric, 但表达式的类型为 character
第1行insert into test_character2numeric(test) values ('1.00'::cha...
                                                      ^
提示:  你需要重写或转换表达式

2.可以看到没有character类型转numeric:

highgo=# \\dC+ character
                                 类型转换列表
     来源类型      |     目标类型      |        函数        | 隐含的?  | 描述
-------------------+-------------------+--------------------+----------+------
 "char"            | character         | bpchar             | 在指派中 |
 boolean           | character         | text               | 在指派中 |
 character         | "char"            | char               | 在指派中 |
 character         | character         | bpchar             ||
 character         | character varying | compatible_text    ||
 character         | name              | name               ||
 character         | nvarchar2         | (binary coercible) ||
 character         | text              | compatible_text    ||
 character         | varchar2          | (binary coercible) ||
 character         | xml               | xml                ||
 character varying | character         | (binary coercible) ||
 cidr              | character         | text               | 在指派中 |
 inet              | character         | text               | 在指派中 |
 name              | character         | bpchar             | 在指派中 |
 nvarchar2         | character         | (binary coercible) ||
 text              | character         | (binary coercible) ||
 varchar2          | character         | (binary coercible) ||
 xml               | character         | (binary coercible) | 在指派中 |
(18 行记录)

3.隐士转换语法:

highgo=# \\h create cast
Command:     CREATE CAST
Description: 建立新的类型转换
Syntax:
CREATE CAST (类型指派中的源数据类型 AS 类型指派中的目标数据类型)
    WITH FUNCTION 函数名称 [ (参数类型 [, ...]) ]
    [ AS ASSIGNMENT | AS IMPLICIT ]

CREATE CAST (类型指派中的源数据类型 AS 类型指派中的目标数据类型)
    WITHOUT FUNCTION
    [ AS ASSIGNMENT | AS IMPLICIT ]

CREATE CAST (类型指派中的源数据类型 AS 类型指派中的目标数据类型)
    WITH INOUT
    [ AS ASSIGNMENT | AS IMPLICIT ]

4.创建隐士转换:

highgo=# create cast (character as numeric) with inout as implicit;
CREATE CAST

测试:
highgo=# insert into test_character2numeric(test) values ('1.00'::character);
INSERT 0 1
可以插入。

当插入值为''时
highgo=# insert into test_character2numeric(test) values (''::character);
错误:  无效的类型 numeric 输入语法: " "

插入值为''时需要对其处理后操作:
highgo=# create or replace function cast_character_to_numeric(character) returns numeric as
highgo-# $$
highgo$# select to_number(decode($1::character,''::character,null,$1::character));
highgo$# $$
highgo-# language sql strict;
CREATE FUNCTION
highgo=# create cast(character as numeric) with function cast_character_to_numeric(character) as implicit;
错误:  类型 character 到 numeric 的转换已经存在
highgo=#

需要删除之前的转换再进行创建
highgo=# drop cast (character as numeric) ;
DROP CAST

highgo=# create cast(character as numeric) with function cast_character_to_numeric(character) as implicit;
CREATE CAST

highgo=# insert into test_character2numeric(test) values (''::character);
INSERT 0 1
此时可以正常插入。

以上是关于瀚高数据库数据类型转换character转numeric的主要内容,如果未能解决你的问题,请参考以下文章

R语言factor类型转numeric

R语言factor类型转numeric

Java基础小记

国产化瀚高数据库数据迁移文档:oracle11g数据库转瀚高8.6数据库实例演示

在瀚高数据库中实现汉字转拼音

Sting和Long类型转换