【问题标题】:Postgres datatype conversion differ on Ubuntu and windowsPostgres 数据类型转换在 Ubuntu 和 Windows 上有所不同
【发布时间】:2015-08-20 14:07:59
【问题描述】:

我在运行下面的窗口时遇到以下异常

错误:运算符不存在:数字 = 可变字符提示:没有运算符与给定名称和参数类型匹配。您可能需要添加显式类型转换。”在使用查询参数执行时

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

getUIDCount(String id) {
 ...

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

其中 id 是数字 (5,0)" 在表格中

在 Ubuntu 上一切正常,但在 Windows 上运行相同代码时出现错误。我必须为 Windows 进行显式转换。我正在使用 PostgreSQL 9.4.3。我正在使用“org.hibernate.dialect.PostgreSQLDialec”和 grails 2.3.11 和运行时 'org.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)

【问题讨论】:

  • 数字数据类型不需要引号。 (如果确实需要引号,则需要单引号)
  • 请添加您在没有演员表的情况下得到的错误
  • "1234567" 是列名,不是字符串文字。您的查询将导致错误消息:column "1234567" does not exist(除非您确实有一个名为 1234567 的列,我非常怀疑
  • @Santosh 那么很清楚:即使列是数字,您也在发送一个字符串。不要将它们作为字符串发送
  • @sami-kuhmonen 但同样的查询也适用于 Ubuntu

标签: windows postgresql ubuntu sqldatatypes


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2012-11-20
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-08
    • 2019-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多