簡體   English   中英

MySQL和PostgreSQL共同的MONTH()和YEAR()函數的任何替代方法

[英]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;

PostgreSQL SQL小提琴

MySQL SQL小提琴

因為您願意接受任何可能的解決方案,所以我有兩個想法。

只要您需要編寫簡單的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM