【问题标题】:PSQL - invalid input syntax for type double precision: "null";PSQL - 双精度类型的无效输入语法:“null”;
【发布时间】:2018-05-31 21:50:20
【问题描述】:

我正在编写一个查询来提取一些数据并遇到这种类型双精度的无效输入语法:“null”错误,我不完全确定它背后的含义和/或没有找到解决方案。我正在运行案例语句的列中确实包含空值,或者它具有我需要的适当值。

account id col 可以是字符串,也可以是空值

我试过了:

case
    when length(account_id) > 1
      then account_id
    else
      'null'
    end as account_id,

case
    when account_id is not null
      then account_id
    else
      'null'
    end as account_id,

都导致无效操作:类型双精度的无效输入语法:“null”;

当我把它放在一个列中并使用长度(account_id)时,它会显示长度或只显示 null - 为什么这在 case 语句中不起作用?

谢谢!

【问题讨论】:

  • 列似乎是数字数据类型,并且您在字符串中使用'null',而不是NULL
  • account_id的数据类型是什么?它的抱怨是double precision
  • 这是一个字符串字段 - 下面戈登的回答有效!

标签: sql postgresql


【解决方案1】:

'null' 是一个字符串。 null 是。 . .好吧null。您的account_id 似乎是double precision 类型。对于account_id,这是一个奇怪的选择,但不合适的数据类型是无关紧要的。相关的是case 表达式希望所有内容都属于同一类型,数字优先。

您可能想要以下两件事之一:

(case when length(account_id) > 1 then account_id end) as account_id,

当没有else 时,默认为null。您可以添加else null,但这是多余的。

或者:

(case when length(account_id) > 1 then account_id::varchar(255) else 'null' end) as account_id,

【讨论】:

  • 我认为 length() 不能应用于数值:ERROR: function length(numeric) does not exist - SQLState: 42883
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多