首页 > 解决方案 > 将语法从 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 = ?

标签: sqlitepostgresql-9.3

解决方案


免责声明:我不知道 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表的主键,一个 `group by r.invoiceno' 就足够了。


推荐阅读