Oracle SQL无单引号实现与like '%值%'等效的模糊查询方案
SQL无单引号等效改写方案
原语句的两处单引号使用场景(JSON路径参数、LIKE模糊匹配值)均可通过内置ASCII字符生成函数+字符串拼接逻辑替代,完全规避单引号使用,改写后逻辑和原语句完全一致。
通用改写版(适配Oracle/MySQL/PostgreSQL等多数主流数据库)
SELECT Json_Value( json, CONCAT(CHR(36),CHR(46),CHR(98),CHR(97),CHR(110),CHR(107),CHR(82),CHR(101),CHR(102),CHR(101),CHR(114),CHR(101),CHR(110),CHR(99),CHR(101)) ) FROM R_O WHERE json LIKE CONCAT(CHR(37), 12345, CHR(37));
改写说明
CHR(36)对应字符$、CHR(46)对应字符.,后续连续CHR拼接出完整JSON路径$.bankReferenceCHR(37)对应模糊匹配通配符%,拼接后等效原语句的'%12345%'- 整个语句全程无单引号,可正常执行
特殊数据库适配
- SQL Server环境下把
CONCAT替换为+运算符即可:
SELECT Json_Value( json, CHR(36)+CHR(46)+CHR(98)+CHR(97)+CHR(110)+CHR(107)+CHR(82)+CHR(101)+CHR(102)+CHR(101)+CHR(114)+CHR(101)+CHR(110)+CHR(99)+CHR(101) ) FROM R_O WHERE json LIKE CHR(37)+CAST(12345 AS VARCHAR)+CHR(37);
内容的提问来源于stack exchange,提问作者Rubin
相关产品推荐
相关产品推荐

