我正在学习 SQL。我的搜索没有取得成果,因为我认为我使用的术语不正确。
我在 Postgresql 中有一个带有日期时间列的表。我想要做的是在结果集中创建一个列,输出如下:Q2/'22
或Q4/'23
。
我尝试过使用+
,但这不起作用(我收到错误)。我不知道如何进一步进行。SQL有办法吗?
SELECT
name, COUNT(name),
DATE_TRUNC('quarter', date) AS quarterview,
CASE
WHEN DATE_TRUNC('quarter', date) = '2022-04-01 00:00:00'
THEN EXTRACT(quarter FROM DATE_TRUNC('quarter', date)) + '/\'' + EXTRACT(year FROM DATE_TRUNC('year', date))
END
FROM
mytable
有一个更好的方法吗?否则我将不得不为每个季度和每年编写案例。
另外,在 case 语句中,我尝试使用别名“quarterview”,但收到错误消息,指出“quarterview”不是列。有没有办法使用别名而不是DATE_TRUNC
多次写入?
我们可以使用
TO_CHAR
与字符串连接相结合的函数,如下所示检查这一点字符串连接:在 PostgreSQL 中,您可以使用
||
而不是连接字符串+
。提取季度和年份:您可以直接从日期列中提取季度和年份,然后根据需要设置它们的格式。
SELECT
在同一 SELECT 中使用别名:您不能在定义别名的同一子句中使用别名(在您的情况下为quarterview) 。别名可以用在GROUP BY
、ORDER BY
、 或包装原始查询的后续查询中。这是您的查询的修订版本:
该查询执行以下操作:
||
字符串连接。EXTRACT(QUARTER FROM date)
并使用 提取年份的最后两位数字EXTRACT(YEAR FROM date) % 100
。name
并DATE_TRUNC('quarter', date)
计算每季度的姓名数。EXTRACT(YEAR FROM date) % 100
,% 100 运算获取年份的最后两位数字(例如,“22”表示 2022 年)。请记住按 select 子句中的所有非聚合字段进行分组。如果您有进一步的条件或特定需求,您可能必须相应地调整 GROUP BY 子句。