如何使用repalce函数在oracle中从查询中更改字符串

时间:2015-03-10 12:37:49

标签: oracle

select replace (SELECT TO_CHAR(CURRENT_TIMESTAMP) FROM DUAL,CURRENT_TIMESTAMP,'2015-03-10 11:45:15') As result from dual;

我想用'2015-03-10 11:45:15'改变CURRENT_TIMESTAMP,但是oracle给出了 错误。但是如果你删除了select语句,那么它的工作正常我的意思是

select replace (TO_CHAR(CURRENT_TIMESTAMP),CURRENT_TIMESTAMP,'2015-03-10 11:45:15') As result from dual;

这个工作正常,但我有很长时间的查询和CURRENT_TIMESTAMP来了好几次,我想用给定的字符串替换它

它在mysql中正常工作我希望它在oracle中

1 个答案:

答案 0 :(得分:0)

您需要在子查询周围放置括号:

select replace ((SELECT TO_CHAR(CURRENT_TIMESTAMP) FROM DUAL),CURRENT_TIMESTAMP,'2015-03-10 11:45:15') As result
from dual;

然而,这写得很糟糕。您的TO_CHAR(CURRENT_TIMESTAMP)没有格式掩码,这意味着您将时间戳转换为字符串依赖于您的nls设置。这是不好的做法。

此外,替换语句的第二个参数中的CURRENT_TIMESTAMP正在进行隐式转换为字符串,再次依赖于您的nls设置。

如果我是你,我会把它写成:

select replace ((SELECT TO_CHAR(CURRENT_TIMESTAMP, 'yyyy-mm-dd hh24:mi:ss') FROM DUAL),
                TO_CHAR(CURRENT_TIMESTAMP, 'yyyy-mm-dd hh24:mi:ss'),
                '2015-03-10 11:45:15') As result
from dual;