[英]Any alternative to MONTH() and YEAR() functions which are common to both MySQL and PostgreSQL
編寫可以在MySQL和PostgreSQL中運行的查詢(一個sql文件),到目前為止,除以下內容外,其他一切都還可以:
SELECT MONTH(Date), YEAR(Date) FROM Ticket;
用於從“票證”表的“日期”列中提取月份號(9,10,11 ..)和年份(2011,2012 ..)(是的,我不能更改此列的名稱)。 它在MySQL中工作正常,但是當我在PostgreSQL中運行查詢時,它為MONTH()和YEAR()給出以下錯誤消息。
ERROR: function month(date) does not exist
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
經過研究后,我發現了一些其他函數將在Postgres中完成這項工作,但恐怕這些函數可能無法在MySQL中工作。 強烈期待任何可能的解決方案。
好吧,如果您在字段的前面使用別名並使用EXTRACT ,則相同的查詢將適用於PostgreSQL和MySQL:
SELECT EXTRACT(MONTH FROM t.Date) AS MonthOfDate,
EXTRACT(YEAR FROM t.Date) AS YearOfDate
FROM Ticket t;
因為您願意接受任何可能的解決方案,所以我有兩個想法。
只要您需要編寫簡單的sql語句,我建議使用預填充日期和列中相應屬性的表。
有時我使用這樣的表:
ID THE_DATE THE_MONTH_OF_DATE THE_YEAR_OF_DATE ...
-----------------------------------------------------------
1 01/01/2014 1 2014
2 01/02/2014 1 2014
3 01/03/2014 1 2014
4 01/04/2014 1 2014
5 02/01/2014 2 2014
6 03/01/2014 3 2014
n xx/xx/xxxx x xxxx
預先填充了應用程序所需日期的表格可以輕松地與所有日期合並,然后提供所需的列。
更好的解決方案是使用數據庫抽象層/對象關系映射器,根據基礎數據庫將您的查詢轉換為正確的數據庫方言,例如Hibernate(Java)。
這兩個數據庫的某些功能有所不同,您可以看到
mysql-SELECT WEEKDAY('2016-06-24');
Postgres-SELECT EXTRACT(dow from'2016-06-20':: date);
或獲取更多參考,您可以訪問postgres文檔
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.