Postgres数据类型转换在Ubuntu和windows上是不同的



我在运行下面的

时在windows上得到以下异常

ERROR: operator does not exist: numeric = character varying提示:没有匹配给定名称和参数类型的操作符。在使用查询参数

执行时,可能需要添加显式类型强制转换。

我将使用函数作为命名参数的数字字符串传递给查询

getUIDCount(String id) {
 ...
select count(UID) as icrd FROM UID_tbl WHERE id = ? 
 ...
 }

where id is numeric(5,0)" in table

在Ubuntu上运行良好,但在windows上运行相同的代码时会出现错误。我必须对窗口进行显式强制转换。我使用的是PostgreSQL 9.4.3。我使用的是"org.hibernate.dialect"。postgresql:postgresql:9.3-1100-jdbc41'

更新了它如何被调用

def Integer getUIDSetSize(String _id)
{ 
   Integer i = 0; 
   Sql sql = new Sql(dataSource); 
   String sqlt = """select count(UID) as icrd FROM UID_tbl WHERE _id = ?"""; 
  log.trace(sqlt); 
  sql.eachRow(sqlt, [_id], { row -> i = row.icrd; }); 
  return i; 
 } 

def _id1 = params._id1;count1 = HelperService.getUIDSetSize(_id1)

从varchar转换为numeric的解决方法是

CREATE CAST(VARCHAR AS NUMERIC) WITH INOUT AS IMPLICIT;

这不是最好的解决方案,建议从代码中选择强制转换。

最新更新