我想知道是否可以根据输入类型构建查询。使用 ${textbox}
调用查询,一个字符串(来自 grafana 文本框)。 foo.maca
是 macaddr 类型。
用户应该能够输入 mac 地址、sernum(字符串)或十进制的十六进制表示(例如 48D)。
这是我到目前为止所得到的:
SELECT
*
FROM
foo
WHERE
CASE pg_typeof('${textbox}'::macaddr)=macaddr THEN maca='${textbox}'::macaddr
CASE pg_typeof('${textbox}'::text)=text THEN LOWER(sernum)=LOWER('${textbox}')
CASE pg_typeof(x'${textbox}'::int)=integer THEN id=x'${textbox}'::bigint
;
(此代码无效。)
这个想法是让 postgres 确定输入字符串的类型并从那里构建 where 子句。
编辑:我该怎么做才能使以下语句返回 foo
?
SELECT CASE WHEN pg_typeof('XY1234'::text)='text' THEN 'foo' ELSE 'bar' END;
您有什么想法或指向正确方向的指针吗?