【发布时间】:2019-08-16 12:16:32
【问题描述】:
EXECUTE 'select to_char(application_date::timestamp, 'Mon-YY') as appl_month from my_schema.my_table;';
上面的 PostgreSQL EXECUTE 语句给出以下错误:
错误:“选择”处或附近的语法错误 to_char(application_date::timestamp, '" LINE 1: EXECUTE '选择 to_char(application_date::timestamp, 'Mon-YY... ^
**********错误**********
错误:“选择”处或附近的语法错误 to_char(application_date::timestamp, '" SQL 状态:42601 字符:9
任何建议都会有所帮助。
改为下面的语句
EXECUTE 'select to_char(application_date::timestamp, ' || quote_literal(Mon-YY) || ') from standard.npo_weekly_export;';
但是给出了新的错误:
ERROR: syntax error at or near "'select to_char(application_date::timestamp, '"
LINE 1: EXECUTE 'select to_char(application_date::timestamp, ' || qu...
^
********** Error **********
ERROR: syntax error at or near "'select to_char(application_date::timestamp, '"
SQL state: 42601
Character: 9
预期输出: - 以 Mon-YY 格式按月计数
Application month Application # Final Approval #
Jan-17 1,000 800
Feb-17 1,010 808
Mar-17 1,020 816
Apr-17 1,030 824
如果我执行以下查询:
select to_char(application_date, 'Mon-YY') as appl_month,
count(distinct application_id) as appl_count,
sum(final_approval_ind) as fa_count,
from my_schema.my_table
group by appl_month
order by appl_month;
生成的输出:(注意:按文本排序,而不是按日期)
"Apr-17";94374;19953
"Apr-18";87446;20903
"Aug-17";102043;21536
"Aug-18";91107;20386
"Dec-17";63263;13755
"Dec-18";21358;74
"Feb-17";89447;18084
"Feb-18";75426;16144
"Jan-17";86103;16394
"Jan-18";79403;17766
"Jul-17";90380;18929
"Jul-18";85439;20186
"Jun-17";95596;20403
"Jun-18";85764;18707
"Mar-17";112929;23323
"Mar-18";91179;21841
"May-17";101907;22349
"May-18";90885;21550
"Nov-17";78284;16791
"Nov-18";80472;7656
"Oct-17";87955;18524
"Oct-18";82821;17056
"Sep-17";80740;17788
"Sep-18";75785;18009
问题: to_char() 返回文本,它按文本而非日期排序。所以输出是混乱的,而不是按 Mon-YY 排序的。
【问题讨论】:
-
application_date是什么数据类型? -
@HighPerformanceMark:尝试使用 quote_literal(Mon-YY),但出现新错误。有没有办法在动态 SQL 中处理 to_char 模式?
-
@a_horse_with_no_name: application_date 是 date 类型
-
那么演员
::timestamp就没用了 -
@a_horse_with_no_name: application_date 的格式为 YYYY-MM-DD,我需要从该日期提取 Mon-YY,我发现 to_char 将 YYYY-MM-DD 转换为 Mon-YY 但返回文本,所以接下来我提取 YY 部分和 Mon 部分,然后按 YY 和 Mon 排序。仍然不能回答我遇到的错误
标签: postgresql