首页 > 解决方案 > Postgresql:基于变量类型构建查询

问题描述

我想知道是否可以根据输入类型构建查询。${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;

你有一个想法或指向正确方向的指针吗?

标签: postgresqlgrafana

解决方案


推荐阅读