当前位置: 首页 > 知识库问答 >
问题:

“' select to _ char(application _ date::timestamp,'”处或附近出现语法错误

姜鸿
2023-03-14
EXECUTE 'select to_char(application_date::timestamp, 'Mon-YY') as appl_month from my_schema.my_table;';

上面的PostgreSQL EXECUTE语句给出了以下错误:

错误:语法错误在“'选择to_char(application_date::时间戳,'”行1:执行'选择to_char(application_date::时间戳,'Mon-YY... ^

错误 **********

错误:“select 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

问题:< code>to_char()返回文本,它按文本而不是按日期排序。所以输出是混乱的,而不是按蒙-YY分类的。

共有1个答案

梁和颂
2023-03-14

在保留数据类型的派生表(又名“子查询”)中进行聚合,然后在外部查询中进行排序:

select to_char(ap_month, 'Mon-YY') as appl_month
       appl_count, 
       fa_count
from (       
  select date_trunc('month', application_date) as ap_month, 
         count(distinct application_id) as appl_count, 
         sum(final_approval_ind) as fa_count,
  from my_schema.my_table 
  group by ap_month
) t
order by ap_month;

date_trunc('月',application_date)将把application-date,标准化为月初,但将保留日期数据类型,以便外部查询中的排序正确。

我不知道您的问题中的动态SQL应该做什么,但是如果出于任何原因需要使用该查询作为动态SQL,则需要通过将单引号加倍来转义单引号。

execute '
  select to_char(ap_month, ''Mon-YY'') as appl_month
         appl_count, 
         fa_count
  from (       
    select date_trunc(''month'', application_date) as ap_month, 
           count(distinct application_id) as appl_count, 
           sum(final_approval_ind) as fa_count,
    from my_schema.my_table 
    group by ap_month
  ) t
  order by ap_month;
'; -- end of dynamic SQL

但是使用Postgres的美元报价会更容易:

execute $dyn$
  select to_char(ap_month, 'Mon-YY') as appl_month
         appl_count, 
         fa_count
  from (       
    select date_trunc('month', application_date) as ap_month, 
           count(distinct application_id) as appl_count, 
           sum(final_approval_ind) as fa_count,
    from my_schema.my_table 
    group by ap_month
  ) t
  order by ap_month;
$dyn$; -- end of dynamic SQL

请注意,您可以嵌套美元引号字符串,因此如果在函数中使用该查询,只需使用与函数体不同的分隔符即可(参见手册中的示例)

 类似资料:
  • 我想通过psycopg2将csv文件导入PostgreSQL。但是,csv文件列名包含特殊字符。我可以用这些代码行通过psycopg2创建一个表。 当我想使用copy_from函数导入带有这些代码行的csv文件时。 它总是返回错误psycopg2。错误。SyntaxError:在“/”处或附近出现语法错误 我尝试在特殊字符之前使用反斜杠,或者将特殊列名放在双引号中,但它仍然返回相同的错误消息。如何

  • 问题内容: 我有一个小查询,并在其旁边放了一个联合查询。但是,联合中存在语法错误。 这是我收到的错误 问题答案: 我知道出了什么问题。您必须在查询的末尾且仅在末尾下订单。它给了我一个错误,因为它认为查询已结束。 做到了。

  • 我在Postgres中执行了这个SQL语句 而且 是表名 是具有整数数据类型的列名。 我想根据用户的输入将数据类型修改为boolean或text或varchar(256)等。但是当我运行查询时,我得到了错误 错误:“modify”或“modify”附近有语法错误 不确定是什么问题。右侧查询需要帮助。

  • 在这里,我需要在python中的postgresql表中插入一些值。 我尝试了下面的代码,但出现了一个错误,即“psycopg2.ProgrammingError:语法错误位于或接近“st”\r,referer:http://localhost:8080/" 请解决这个问题,提前感谢......

  • 问题内容: 我创建了这个表: 我尝试运行以下postgres脚本: 为什么会出现此语法错误? 问题答案: 支持版本 根据以上@klin的评论,仅 PostgreSQL 9.5及 更高版本支持。 独特的约束 在添加唯一索引。目前,该列上没有任何约束,因此该列上没有冲突的可能性。 但是,如果您不希望该列是唯一的,那么您打算遇到什么冲突/您希望通过该操作解决的问题是什么? 请参阅https://www.

  • 我试图通过使用postgres数据库设置Spring Boot项目。我的实体是:- 用户 作用 用户_角色 我的< code > application . properties 文件如下所示 所以每当我运行这个应用程序。在postgresql数据库上成功创建了user_role和role表。但用户实体抛出异常。 错误说:- 正如您所看到的实体上的错误点。但是当应用程序连接到mysql数据库时,相