sql - PostgreSQL 中的 CAST

标签 sql database postgresql casting

我有这个查询,我需要在 t.delete_req='1' 和 t.delete_req='0' 时设置 'yes' 和 'no'

SELECT t.id,t.activity_id,t.type,t.sub_type,t.name,t.description,t.source, 
CASE t.delete_req WHEN t.delete_req='1' THEN 'Yes' WHEN t.delete_req='0' THEN 'No' END from "activities" "t" 

它抛出错误并说存在一些转换问题。以下是错误。

ERROR:  operator does not exist: character = boolean
LINE 2: CASE t.delete_req WHEN t.delete_req='1' THEN 'Yes' WHEN t.de...
                          ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.

现在我试着用这种方式转换它,//CAST(t.delete_req AS char)='1'

SELECT t.id,t.activity_id,t.type,t.sub_type,t.name,t.description,t.source, 
CASE t.delete_req 
WHEN CAST(t.delete_req AS char)='1' THEN 'Yes' 
WHEN CAST(t.delete_req AS char)='0' THEN 'No' END from "activities" "t" 

但我仍然无法让它工作。错误是一样的。

ERROR:  operator does not exist: character = boolean

在表中,t.delete_req 是一个字符,定义如下。

delete_req character(1) NOT NULL DEFAULT '0'::bpchar,

最佳答案

您必须稍微更改语法(为清楚起见格式化):

select
    t.id,t.activity_id,t.type,t.sub_type,t.name,t.description,t.source, 
    case t.delete_req
        when '1' then 'Yes'
        when '0' then 'No'
    end
from activities as t

select
    t.id,t.activity_id,t.type,t.sub_type,t.name,t.description,t.source, 
    case
        when t.delete_req = '1' then 'Yes'
        when t.delete_req = '0' then 'No'
    end
from activities as t

关于sql - PostgreSQL 中的 CAST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18887442/

相关文章:

sql - 将过程选择存储到变量中

c# - Entity Framework 中的可查询 Linq 查询差异

mysql - 按条件顺序用其他列值更新 Sql 列

java - 在 heroku 上部署 Spring MVC Web 应用程序

PostgreSQL:将几何类型的原点更改为左上角

mysql - 来自使用 GROUP_CONCAT() 打包的 Tri-INNER JOIN-Relation 的重复值

sql-server - SQL Server,删除一条或多条记录后未将记录插入到正确的位置

mysql - MySQL 中的层次关系数据库设计

database - JDBCTemplate with TransactionTemplate and Connection Pool,使用哪个数据源

mysql - 获取 PostgreSQL 中所有序列的最大 ID