sql - 如何使用“where”子句转义 SQLite 查询中的下划线
问题描述
我想查询以下数据库:
sqlite> select * from queue;
739cdbff68914b688509372af85ac05e|31967522_13|rendering
810c69dc4d68425f83c82aa1ac0a625e||waiting_train
af6f5d0c5cb2472fb311ccf6b738dacd|31967524_2|rendering
cf0164f51da64986a4ced63301aa1d85|31967522_3|training
ef07bb25da94472f87460768ea0b8f7d|31967522_16|rendering
testuidaxc|31967523|training
查询job=31967523
正在工作:
sqlite> select * from queue where job='31967523';
testuidaxc|31967523|training
但是,对于带有下划线的作业,无论我如何尝试,它都不起作用:
sqlite> select * from queue where job='31967522_3';
sqlite> select * from queue where job='31967522[_]3';
sqlite> select * from queue where job=31967522[_]3;
Error: near "[_]": syntax error
sqlite> select * from queue where job='31967522[_]3';
所有都没有返回任何内容或错误。似乎是下划线引起了问题,但是我应该如何逃避呢?谢谢。
解决方案
我认为不是以下选择查询:
SELECT * FROM queue WHERE job = '31967522_3';
你真的打算写这个查询:
SELECT * FROM queue WHERE job LIKE '%31967522_3%';
与 equals 一起使用时的文字下划线应该没有问题。使用 时LIKE
,我们可能会转义下划线:
SELECT * FROM queue WHERE job LIKE '%31967522\_3%' ESCAPE '\';
上面的查询将匹配job
包含文字字符串的任何记录31967522_3
。
从文档看来,ESCAPE
当打算将某个字符用作LIKE
. 也就是说,似乎没有默认的转义字符。
推荐阅读
- python - 每当我尝试加载静态文件时,它都会给出错误 404 not found
- php - 如何将一个 JSONObject 中的 JSON 字符串放入数组中进行排序?
- airflow - Apache Airflow - 1.10.4 - logging_mixin.py - 在日志上打印 ASCII 字符
- r - 生成序列 111122222333334
- c# - 如何使用 string.split 对具有特定格式的字符串列表进行排序?
- python - 如何使 print() 函数不使用输入字段中的文本
- node.js - 如何修复“在 est-ggjr@0.1.0 启动脚本失败”-错误
- caffe - 保存特定层的权重,不仅在 Caffe 上可视化
- gatsby - 带有 Leaflet.locatecontrol 的 React-Leaflet
- python - pandas series,isnull() 在列表理解中不起作用