将语法从sqllite转换为PostgreSQL

时间:2018-09-03 10:47:24

标签: sqlite postgresql-9.3

我有一个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 = ?

1 个答案:

答案 0 :(得分:0)

免责声明:我不知道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分组”就足够了。