MySQL 转 PostgreSQL (holo)

语法区别

3. 关于日期、时间的提取

timestamp 类型的数据,把小时、分钟等提取出来。

--mysql
    SELECT hour(time) AS timeHour
    FROM   cart
    WHERE  ......;

--PostgreSQL (holo) 方法一
    SELECT DATE_PART('hour', time) as timeHour
    FROM   cart
    WHERE  ......;

--PostgreSQL (holo) 方法二
    SELECT EXTRACT(hour FROM time) AS timeHour
    FROM   cart
    WHERE  ......;

其中DATE_PART(field, source)extract() 两者等效,第一个参数可选以下内容:
* century 世纪
* decade 年份 ÷ 10
* year
* month 对于timestamp值,它是一年里的月份数(1-12);对于interval值, 它是月的数目,然后对 12 取模(0-11)
* day
* hour 小时
* minute 分钟
* second
* microseconds 秒域(包括小数部分)乘以 1,000,000 。请注意它包括全部的秒。
* milliseconds 秒域(包括小数部分)乘以 1,000 。请注意它包括完整的秒。
* dow 每周的星期几 , 星期日(0),星期六(1)
* doy 一年的第 x 天
* epoch
* isodow
* isoyear
* timezone
* timezone_hour
* timezone_minute

(参考资料 / 详细资料 连接)

GROUP BY

将MySQL中包含GROUP BY的代码,直接迁移到PGSQL中,有概率会遇到这个问题:
[42803] ERROR: column "table.colName" must appear in the GROUP BY clause or be used in an aggregate function

错误:”cart.id”列 必须出现在GROUP BY子句中或在聚合函数中使用