列“expired_date”的类型为date,但表达式的类型为text

时间:2017-04-26 03:21:11

标签: postgresql

我想要多个条件更新多行。

这是我的测试结果的选择查询。

select name, register_date, expired_date, to_char(register_date + interval '1 year' - interval '1 day', 'YYYY-MM-DD') from tb_agent where agent_id = agent_id and agent_id in (46,47,62)

它可以显示我期望的结果,

但是当我使用此代码进行多次更新时

update tb_agent set expired_date = (select to_char(register_date + interval '1 year' - interval '1 day', 'YYYY-MM-DD') from tb_agent where agent_id = agent_id) where agent_id in (46,47,62)

我得到了这个

column "expired_date" is of type date but expression is of type text

register_date是日期时间列,expired_date是varchar

我的代码有问题吗?

提前谢谢。

1 个答案:

答案 0 :(得分:1)

to_char将日期转换为格式化字符串。你可以把它作为日期投射。

但更新声明也可简化为以下内容:

update tb_agent 
set expired_date = (register_date + interval '1 year' - interval '1 day')::date
where agent_id in (46,47,62)