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

如何在oracle中使用repalce函数更改查询中的字符串,oracle,Oracle,我想用“2015-03-10 11:45:15”更改当前的时间戳,但oracle给出了 错误。不过,如果您删除select语句,它就可以正常工作了 select replace (SELECT TO_CHAR(CURRENT_TIMESTAMP) FROM DUAL,CURRENT_TIMESTAMP,'2015-03-10 11:45:15') As result from dual; 这很好,但我有这么长的查询和当前的时间戳来了好几次,我想用给定的字符串替换它 它在mysql中运行良好我希

我想用“2015-03-10 11:45:15”更改当前的时间戳,但oracle给出了 错误。不过,如果您删除select语句,它就可以正常工作了

select replace (SELECT TO_CHAR(CURRENT_TIMESTAMP) FROM DUAL,CURRENT_TIMESTAMP,'2015-03-10 11:45:15') As result from dual;
这很好,但我有这么长的查询和当前的时间戳来了好几次,我想用给定的字符串替换它


它在mysql中运行良好我希望它在oracle中运行

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

select replace (TO_CHAR(CURRENT_TIMESTAMP),CURRENT_TIMESTAMP,'2015-03-10 11:45:15') As result from dual;
然而,这篇文章写得很糟糕。您的
到\u CHAR(当前\u时间戳)
没有格式掩码,这意味着时间戳到字符串的转换依赖于nls设置。这是个坏习惯

此外,replace语句的第二个参数中的
CURRENT\u TIMESTAMP
正在隐式转换为字符串,这同样取决于nls设置

如果我是你,我会这样写:

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

在实际查询中,我给出了格式掩码,但这只是一个例子。感谢Boneist提供的解决方案Hi Bon,如果字符串多次出现会怎么样。因为它会导致许多值错误,所以您必须提供更多信息-例如,准确反映您所处情况的信息。既然你标记了这个问题的答案,也许最好开始一个新的问题。
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;