【问题标题】:PostgreSQL: boolean + integerPostgreSQL:布尔+整数
【发布时间】:2013-02-01 13:42:24
【问题描述】:

我有一个类似的查询:

SELECT (column LIKE 'string')+100

返回错误:运算符不存在:布尔+整数

我找不到将 bool 转换为 int 的函数,只有文本转换为 int:to_number()。

有没有办法解决这个问题?

【问题讨论】:

  • 您希望将布尔值true 或布尔值false 转换为什么?
  • 两者,这取决于 () 之间的子句的结果。我需要得到整数 - 0 或 1。
  • (像'string'这样的列)::integer + 100`有效吗?否则使用CASE WHEN .. THEN
  • 非常感谢@vol7tron,::integer 对我来说效果很好! :)

标签: postgresql integer boolean type-conversion


【解决方案1】:
【解决方案2】:

如果要将字符串比较转换为真时为 1,假时为 0,可以使用 case 语句:

select case when column like '%foo%' then 1 else 0 end as my_int from my_table;

如果您想添加到该结果中,您可以执行以下操作:

select (case when column like '%foo%' then 1 else 0 end) + 100 as my_int from my_table;

【讨论】:

  • 我不这么认为,但是如果由于某种原因你发现你需要经常做这种事情,你可以把它放在一个函数中:create function matches(text, text) RETURNS integer AS $$ select case when $1 like $2 then 1 else 0 end $$ LANGUAGE SQL;然后你的 sql 将是 select matches(column, '%foo%') + 100 from my_table
【解决方案3】:
SELECT (column LIKE 'string')::integer +100

【讨论】:

  • 能否提供 ::integer 的参考?
  • @Mansoor,查看section 4.2.9 的文档。
【解决方案4】:

我需要更便携的解决方案,所以这个最适合我:

SELECT CAST((column LIKE 'string') AS integer)+100

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-08
    • 2013-08-09
    • 2012-09-03
    • 2021-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多