2017-04-26 75 views
0

我想用多个条件更新多行。列“expired_date”是类型日期,但表达式是文本类型

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

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

你铸造'date'到''中select' text'。只要删除'to_char()'。 – AlexM

+0

@AlexM我需要格式化为YYYY-MM-DD,问题已更新 –

回答

1

to_char将日期转换为格式化的字符串。你可以将它转换为日期。

但是UPDATE语句可以简化为以下还有:

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