【问题标题】:oracle escape single quote in string queryoracle在字符串查询中转义单引号
【发布时间】:2014-03-22 23:06:51
【问题描述】:

如何在 plsql 块中的字符串查询中转义单个字符。我尝试用双引号转义,但似乎没有用。我想从一段时间和之后选择数据,但是我拥有的日期变量是 YYMM 格式,我正在将它相应地转换为时间戳或日期时间。

这是代码示例:

declare
datevar     varchar2(4);
stringquery varchar(1000);
begin
stringquery := 'select * from mytable where datetimecol > to_timestamp('||datevar||',''YYMM'')';

For i in stringquery Loop
  do sth

【问题讨论】:

  • 如果您将其用于游标,您可能需要考虑使用绑定变量,而不是在查询中嵌入字符串值。
  • 另外请显示您的实际代码和值,以及它生成的错误;您对 Gordon 的回答的评论表明您正在尝试各种事情并遇到各种错误,但您需要显示哪个错误与哪个代码尝试相关 - 混合和匹配,并且含糊不清,无济于事......

标签: oracle plsql


【解决方案1】:

两个单引号被解释为字符串中的一个引号,所以你的说法是比较正确的。也许你也想在 "datevar" 周围加上引号:

stringquery := 'select * from mytable where datetimecol > to_timestamp('''||datevar||''',''YYMM'')';

您可以轻松地对此进行测试:

select 'select * from mytable where datetimecol > to_timestamp('''||datevar||''',''YYMM'')'
from (select 'x' as datevar from dual) t

【讨论】:

  • 有趣的是,我使用 dbms_output 检查 plsql 中的参数,它会打印出正确的值 1001(这将被解释为 datetime)。在 plsql 开发人员中,当我有 select * from sth where datetimecol > to_timestamp('1001','YYMM') 时,它正在工作,但是在 plsql 块 stringquery 中使用它时:='select * from mytable where datetimecol > to_timestamp('||日期变量||',''YYMM'')';它无法解决预期的问题 - 得到数字或 plsql 数字值错误等
  • @GeorgeGeorgiou 。 . .在您评论中的示例中,您需要在 datevar 周围加上引号。
  • 我尝试用 1 个单引号、2 个单引号、3 个单引号和 "'||datevar 双引号将 datevar 括起来,但似乎没有任何效果。有解决方法吗?
  • @GeorgeGeorgiou 。 . .打印出stringquery 并尝试运行每一个。您应该很快就可以使用其中一个版本。
猜你喜欢
  • 2013-06-12
  • 2015-07-07
  • 2017-07-10
  • 2019-09-08
  • 2023-04-02
  • 1970-01-01
相关资源
最近更新 更多