在PostgreSQL的表达式中使用强制转换为整数

在PostgreSQL的表达式中使用强制转换为整数,sql,postgresql,Sql,Postgresql,我一直在尝试使用此查询: Select ((2017 - CAST(substring(p.nip from 9 for 4) AS INTEGER)) * 12) + 11 - CAST(substring(p.nip from 13 for 2) AS INTEGER) >= 144 from m_pegawai p 无济于事。我不断收到错误:整数的输入语法无效:“ 这个问题怎么了?我尝试在不同的位置放置括号,但到目前为止没有结果。空字符串'不是有效的整数。有些数据库允许您将'转换为

我一直在尝试使用此查询:

Select ((2017 - CAST(substring(p.nip from 9 for 4) AS INTEGER)) * 12) + 11 - CAST(substring(p.nip from 13 for 2) AS INTEGER) >= 144 from m_pegawai p
无济于事。我不断收到错误:整数的输入语法无效:“

这个问题怎么了?我尝试在不同的位置放置括号,但到目前为止没有结果。

空字符串
'
不是有效的整数。有些数据库允许您将
'
转换为
0
。PostgreSQL不是其中之一

使用


或者对于SQL标准方法,使用
CASE
表达式-但这更为详细。

当我们完全不知道
p.nip
是什么或它包含什么,或者您试图对该表达式做什么时,我们应该如何帮助您?我有一些东西(但我不会告诉你什么),我试图将它的子字符串转换为整数,但它不起作用。发生了什么?当您在这里提问时,请记住,除了您提供(或不提供)的详细信息来帮助您之外,我们绝对没有关于您的问题的信息。如果不包含相关信息,任何试图回答的尝试都将是胡乱猜测。不能将空字符串转换为整数。
substring(p.nip from 9 for 4)
substring(p.nip from 13 for 2)
返回空字符串。
应该是
谢谢。结果是有一些
p.nip
值的长度小于
子字符串中指定的长度(p.nip从9变为4)
子字符串(p.nip从13变为2)
CAST (NULLIF(substring(...), '') AS INTEGER)