【问题标题】:invalid input syntax for integer: "" : Postgresql整数的无效输入语法:“”:Postgresql
【发布时间】:2021-07-05 08:01:39
【问题描述】:

我正在从 mssql 迁移到 postgresql,但在解决其中一个查询时遇到了问题。

我的查询:

SELECT 1, 
       CASE 
          WHEN cast((case 
                       when split_part(mt_outward_qty,'/',1) > '0' then  
                         substring(mt_outward_qty,0,split_part(mt_outward_qty,'/',1)::int) 
                       when split_part(mt_outward_qty,'.',1)>'0' then  
                         substring(mt_outward_qty,0,split_part(mt_outward_qty,'.',1)::int) 
                      else  
                       mt_outward_qty 
                   end) as int) > 0  
             THEN 'Y' 
             ELSE 'N' 
        END 
from STL_CS_Tra_requestdetails 
  LEFT JOIN STL_CS_Tra_storeopening ON req_id =  so_requestid 
  LEFT JOIN STL_CS_Tra_multiple_timinig ON req_id = mt_reqid

执行此操作后,我得到:

整数的输入语法无效:“”

请帮我解决这个问题。

【问题讨论】:

  • 看看这个另一个问题,也许它会帮助你:PG COPY error: invalid input syntax for integer
  • 您需要将空字符串转换为null 值,例如使用nullif(.., '')
  • 如果您可以发布该列的一些示例数据mt_outward_qty(这似乎违反了良好数据库设计的最基本原则)会更容易帮助您
  • 当你转换一个空字符串(由你的case 表达式产生)as int 时,mssql 会做什么,mt_outward_qty 为空时的预期行为是什么?

标签: postgresql


【解决方案1】:

当你转换为 int 时,sql server 自动将空字符串转换为 0

你可以在 postgresql 中这样做:

( 0 || '')::int

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    • 2022-10-08
    相关资源
    最近更新 更多