我想返回sv列(一个varchar)大于40的所有行。如何将sv动态转换为整数?下面这行返回ERROR:整数输入语法无效:"SV">
SELECT namefirst, namelast, yearid FROM pitching JOIN people ON pitching.playerID = people.playerID WHERE CAST(sv AS INTEGER)>40;
Postgres没有内置的方法来避免转换错误。一种方法是使用case
表达式:
WHERE (CASE WHEN sv ~ '^[0-9]+$' THEN sv::integer END) > 40
或者,如果整数在左边填充为0,则可以使用字符串比较:
WHERE sv >= '40'
但是,这有匹配非数值值的风险(您似乎已经给出了您正在获得的错误)。