Oracle中的日期格式更新不起作用

时间:2014-01-21 13:09:45

标签: sql oracle date

我有一个varchar2字段,只包含日期(出于任何未知原因),但有些寄存器不是“to_date”格式化的。

我需要使用日期格式进行查询[例如: select * from users_table where status_date> '2014-01-21'],但出现消息“ORA-01861:文字与格式字符串不匹配”

所以我想我可以使用以下代码更新日期格式的所有内容:

    update users_table set status_date = to_date(status_date, 'dd-mm-yy') where status_date > '2014-01-21';

执行,但没有寄存器发生变化。请问,我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

如果status_date具有多种格式的日期字符串,则会再次抛出错误。

    update users_table 
    set status_date = to_char(to_date(status_date, 'dd-mm-yy'),'YYYY-MM-DD') 
    where to_date(status_date ,'dd-mm-yy') > to_date('21-01-2014','DD-MM-YYYY');

答案 1 :(得分:1)

我不确定这会完成你最终想要的东西,这是为了避免表格中的不同日期格式。我会做的是像@DanBracuk建议的那样,使用“alter table”在日期类型的表中添加一个新列。

alter table users_table add (actual_status_date date);

然后更改您的查询以将to_date的结果放入新列(确保您的格式匹配@MaheswaranRavisankar建议)。我怀疑你的varchar日期表中可能有多种格式,'dd-mm-yy'格式字符串不匹配。所以这可能是手动和迭代的。继续选取其余的varchar格式,将日期类型放在新列中,直到没有空日期列。然后摆脱你的varchar日期列,永远不要再这样做了:)

如果在您的情况下适用,则可以向新数据列添加约束,例如非空约束。

alter table users_table modify actual_status_date date NOT NULL;

如果你这样做,请确保约束在你拥有的任何表创建脚本中结束。