在FreeRADIUS执行的PostgreSQL查询中,我想做类似的事情(表名和值只是示例):
SELECT name
FROM users
WHERE city LIKE '%blahblah%';
但是有一个陷阱:blahblah值包含在FreeRADIUS变量中,用'%{variable-name}'表示。它扩展为“ blahblah”。
现在我的问题是:如何使用LIKE运算符将%{variable-name}变量与表中存储的值匹配?
我尝试使用
SELECT name
FROM users
WHERE city LIKE '%%{variable-name}%';
但是它不能像这样正确展开,并且显然是错误的。
我要实现的最终查询是
...
WHERE city LIKE '%blahblah%';
因此它与存储在表中的包含'blahblah'的较长字符串匹配,但是我希望该变量动态扩展为正确的查询。有办法吗?
谢谢!
胡乱猜测:
假设FreeRADIUS在整个SQL字符串上进行了哑巴替换,而没有尝试解析文本等,那么在将SQL发送到PostgreSQL之前,您可以使用:
SELECT name
FROM users
WHERE city LIKE '%'||'%{variable-name}'||'%';
编辑:为避免FreeRADIUS不能足够巧妙地解析引起的警告,请将%
s隐藏为十六进制字符:
WHERE city LIKE E'\x25%{variable-name}\x25';
请注意E
字符串的开头,将其标记为要进行转义处理的字符串。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句