【发布时间】:2023-03-04 11:10:01
【问题描述】:
我正在尝试执行我认为是一个足够简单的查询,但是我遇到了语法错误并且可以使用一些指导。本质上,我有一个带有文本输入参数$1 的函数。此参数可以采用由应用程序前端控制的 7 个不同值。
根据这个参数的值,我需要在返回的整数列的某个范围之间返回一个较大表的子集。为了稍微清楚一点,函数中的返回查询看起来像:
SELECT val_1, val_2, val_3
FROM schema_name.table_name
WHERE val_3 BETWEEN
CASE WHEN $1 = 'a' THEN 0 AND 1
WHEN $1 = 'b' THEN 2 AND 7
.
.
.
WHEN $1 = 'g' THEN 50 AND 100
END;
但是,我遇到了一个通常含糊不清的错误:
错误:输入末尾的语法错误 第 42 行:结束; ^ ********** 错误 ********** 错误:输入末尾的语法错误 SQL 状态:42601 人物:1133案例陈述中列出的范围都不同,它们之间没有明显的模式。我当然可以编写一个 IF 块,其中包含 7 个 ELSE 语句,基本上编写相同的选择语句 7 次,但我猜上面的内容不会太远。我以前从未需要以这种方式在WHERE 子句中使用CASE 语句。任何正确方向的提示将不胜感激。
【问题讨论】:
标签: sql postgresql case