将语法从 sqllite 转换为 postgresql



我有一个sqlLite数据库,其中包含某些字段sql语句,需要此sql语句才能在IOS应用程序中创建一些图表。

现在我需要在使用Postgresql的Web应用程序中显示此图表 我需要找到一个从sqllite语法转换为postgresql语法的脚本 诸如printf,当前日期等内容... 我问是否有一些现成的脚本用于这种转换 PS : 我正在使用Symfony作为后端,所以PHP

例:

SELECT
r.agent                                              AS gebiet,
r.invoiceno                                          AS rechnung,
r.infotext                                           AS auftrag,
c.companyno                                          AS kundenr,
c.companyname                                        AS kunde,
r.itemno                                             AS artikelnr,
r.itemtext                                           AS artikel,
SUM(r.qty) || ' ' || r.unit                          AS menge,
printf('%.2f', SUM(r.turnover) / SUM(r.qty))         AS preis,
printf('%.2f', SUM(r.turnover)) || ' ' || r.currency AS gesamt,
'2'                                                  AS 'sys_align9',
'2'                                                  AS 'sys_align10',
'2'                                                  AS 'sys_align11'
FROM
invoices r
INNER JOIN
company c
ON
r.companyno = c.companyno
WHERE
r.agent = ?

免责声明:我不知道SQLite;)

查询结构本身看起来不错,但有两件事不适用于 Postgres:

  • 我假设printf()将输出格式化为小数点后两位,因此to_char()可能是您要查找的
  • 标识符需要括在双引号中,而不是单引号中。因此,AS 'sys_align11'应该是"AS "sys_align11",但不需要开头的引号。
SELECT
r.agent                                              AS gebiet,
r.invoiceno                                          AS rechnung,
r.infotext                                           AS auftrag,
c.companyno                                          AS kundenr,
c.companyname                                        AS kunde,
r.itemno                                             AS artikelnr,
r.itemtext                                           AS artikel,
SUM(r.qty) || ' ' || r.unit                          AS menge,
to_char(SUM(r.turnover) / SUM(r.qty), '0.00')        AS preis,
to_char(SUM(r.turnover),'0.00') || ' ' || r.currency AS gesamt,
'2'                                                  AS sys_align9,
'2'                                                  AS sys_align10,
'2'                                                  AS sys_align11
FROM
invoices r
INNER JOIN
company c
ON
r.companyno = c.companyno
WHERE
r.agent = ?

如果turnoverinteger(或bigin(,则需要将其转换为数字,否则除法将作为整数除法完成,例如SUM(r.turnover)::numeric

当你使用聚合函数时,你将需要在Postgres中进行某种group by- 否则结果不会是确定性的。

如果invoicenoinvoices表的主键,那么"按 r.invoiceno 分组"就足够了。

最新更新