postgresql - 有条件的情况下使用 case 时的语法错误
问题描述
我收到以下错误:
postgresql 错误:在“2020”第 2 行或附近出现语法错误:... THEN amount * split_exchange_rate ELSE 0 END) AS 2020Q4_rev...
请参阅下面的代码。我正在使用 postgresql
SELECT object_id
, SUM(CASE WHEN created::date >= '2020-10-01' AND created::date <= '2020-12-31' THEN amount * exchange_rate ELSE 0 END) AS 2020Q4_revenue
, SUM(CASE WHEN created::date >= '2021-01-01' AND created::date <= '2021-03-31' THEN amount * exchange_rate ELSE 0 END) AS 2021Q1_revenue
, SUM(CASE WHEN created::date >= '2021-04-01' AND created::date <= '2021-06-30' THEN amount * exchange_rate ELSE 0 END) AS 2021Q2_revenue
, SUM(CASE WHEN created::date >= '2021-07-01' AND created::date <= '2021-09-30' THEN amount * exchange_rate ELSE 0 END) AS 2021Q3_revenue
from raw_data.purchase_revenue pr
group by 1
解决方案
别名 like2020Q4_revenue
是 SQL 中的“标识符”,因此它必须符合以下规则:
SQL 标识符和关键字必须以字母(
a
-z
,但也包括带有变音符号和非拉丁字母的字母)或下划线 (_
) 开头。标识符或关键字中的后续字符可以是字母、下划线、数字 (0
-9
) 或美元符号 ($
)。请注意,根据 SQL 标准的字母,标识符中不允许使用美元符号,因此使用它们可能会降低应用程序的可移植性。
如果用双引号括起来,您仍然可以使用该别名:
还有第二种标识符:分隔标识符或引用标识符。它由双引号 (
"
) 中的任意字符序列组成。分隔标识符始终是标识符,而不是关键字。所以"select"
可以用来引用名为“select”的列或表,而未加引号的 select 将被视为关键字,因此在需要表或列名的地方使用时会引发解析错误。带引号的标识符可以包含任何字符,但代码为零的字符除外。(要包含双引号,请写两个双引号。)
推荐阅读
- vb.net - 在键入 vb.net windows 应用程序时,如何在文本框中将值格式化为印度货币?
- python - Django:像 LoginView 这样的通用表单在哪里呈现函数字典填充以及如何更改它
- javascript - 为什么 html 画布动画会为每个新矩形渲染一个临时间隙?
- batch-file - 批处理文件中的“nul”是什么?
- javascript - setTimeout 无法访问变量
- sql - 排序字母+字符+数字?
- mysql - MariaDB 使用 PHP PDO 存储与原始字段不同的值的 varbinary 字段
- mysql - MySQL 查询在子查询中使用 JOINS 太慢
- python - 如何从列表中删除标点符号
- vue.js - Nuxt js如何在商店中调度动作并改变状态