【问题标题】:Escape blackslash in SQL query in Ruby在 Ruby 中的 SQL 查询中转义反斜杠
【发布时间】:2014-12-25 19:47:19
【问题描述】:

我已在 SQLite 中成功尝试过此操作(即仅返回包含字符“_ S _”的 trip_id):

SELECT trip_id, arrival_time 
FROM stop_times 
WHERE stop_id  = 142444 trip_id LIKE '%\_S\_%' ESCAPE '\' 

但是当我尝试像这样通过 ruby​​ 传递该查询时:

SELECT trip_id, arrival_time 
FROM stop_times 
WHERE stop_id  = #{arret[1].to_i} AND trip_id LIKE \'%\_S\_%\'

我没有相同的结果(即返回没有“_ S _”的trip_id)。

我尝试在 ruby​​ 命令中添加Escape \'\\\',但没有成功。
难道我做错了什么?

ps:我在 Windows 8 上使用 Ruby 1.9.3 和 SQLite 3.8.7.4

【问题讨论】:

  • 你试过没有转义吗?
  • @popovitsj:问题是我特别想要 id 中的字符“S”。下划线不是通配符。

标签: sql ruby sqlite escaping backslash


【解决方案1】:

您不需要在双引号内使用带有单引号的反斜杠。

(另外,查找 %q 和 %Q ruby​​ 运算符。)

【讨论】:

  • 实际上我是在尝试转义下划线而不是引号。
【解决方案2】:

只需要转义下划线(_)。

试试这个:

"SELECT trip_id, arrival_time FROM stop_times WHERE stop_id  = #{arret[1].to_i} AND trip_id LIKE '%\_S\_%'"


如果您使用 Rails

StopTime.select('trip_id, arrival_time').where("stop_id = ? AND trip_id LIKE ?", arret[1].to_i, '%\_S\_%')

【讨论】:

  • 目标是只返回这种trip_id“14S_S_18_4_6_54”而不是这种“14S_F1_55_7_4_55”。所以我需要查询来专门搜索“S
  • 那么上面的查询就可以了。不是吗?你试过了吗?
  • 是的,我试过了,但我仍然有我不想要的那种 trip_id(即没有“_ S _”的那个)
  • _ 在 LIKE 模式中类似于 . 在正则表达式中。
  • 很抱歉回复晚了有一些网络问题。我已经更新了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-26
  • 2016-04-09
  • 2013-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多