在MySQL中,我可以這樣做:尋找日期提前一個月在同一天
SELECT DATE_ADD( '2010-07-02',間隔1個月)
並返回:
2010-08-02
這是偉大的......現在是有A M ySQL函數,我可以使用它來查找在同一天提前一個月的日期。例如,2010年7月2日將在2010年7月的第一個星期五。有沒有簡單的方法來查找2010年8月的第一個星期五是用SQL語句?
在MySQL中,我可以這樣做:尋找日期提前一個月在同一天
SELECT DATE_ADD( '2010-07-02',間隔1個月)
並返回:
2010-08-02
這是偉大的......現在是有A M ySQL函數,我可以使用它來查找在同一天提前一個月的日期。例如,2010年7月2日將在2010年7月的第一個星期五。有沒有簡單的方法來查找2010年8月的第一個星期五是用SQL語句?
它有一個有點複雜,但這裏有雲:
SELECT IF(MONTH(DATE_ADD('2010-07-02', INTERVAL 28 DAY)) = MONTH('2010-07-02'),
DATE_ADD('2010-07-02', INTERVAL 35 DAY),
DATE_ADD('2010-07-02', INTERVAL 28 DAY));
理由:如果你添加4周或5周,你仍然在同一天;因爲所有的月份都在28天到35天之間,如果4周後仍然是同一個月,則再增加一週。
更新:嗯,我沒有覺得這很好 - 它適用於第一個月的X,但必須爲第二,第三...(即第三個X月可能會返回第二個X下個月) 。嘗試#2:
SELECT IF(
CEIL(DAY(DATE_ADD('2010-07-02', INTERVAL 35 DAY))/7) = CEIL(DAY('2010-07-02')/7),
DATE_ADD('2010-07-02', INTERVAL 35 DAY),
DATE_ADD('2010-07-02', INTERVAL 28 DAY));
理由:CEIL(DAY(x)/7)
是x的週數。如果添加5周後不同,則添加4周。
更新2:大聲笑,我今天吸了,我應該真的想在我發佈之前......周通常定義爲週一至週日,或太陽週一,不是從月開始到6天之後。爲了彌補這一點:
SELECT IF(
CEIL((DAY(DATE_ADD('2010-07-02', INTERVAL 28 DAY)) - DAYOFWEEK('2010-07-02'))/7)
= CEIL((DAY('2010-07-02') - DAYOFWEEK('2010-07-02'))/7),
DATE_ADD('2010-07-02', INTERVAL 28 DAY),
DATE_ADD('2010-07-02', INTERVAL 35 DAY));
啊,對。我完全忽略了這一點。我欣賞後續行動。非常感謝! – 2010-07-07 03:42:22
是的,沒問題。我真的希望沒有第四個:D – Amadan 2010-07-07 04:01:31
更新2也不是很有效。第二個「週數」爲零(CEIL()中的語句爲負數)。失敗的例子:2010-07-06到2010-08-10。 2010-07-06位於本月的第一個星期二。 2010-08-10位於本月的第二個星期二。 – 2010-07-08 06:47:00
這是否有訣竅?
SELECT DATE_ADD(
DATE_SUB(
DATE_ADD('2010-07-06', INTERVAL 1 MONTH),
INTERVAL DAYOFWEEK(DATE_ADD('2010-07-06', INTERVAL 1 MONTH)) DAY
),
INTERVAL DAYOFWEEK('2010-07-06') DAY
)
這似乎並不適用於2010年6月1日之類的內容,但是如果檢索月份與開始月份相同的月份中添加了代碼以添加7天,則事情似乎會變得更好。到目前爲止:p – 2010-07-08 07:37:13
希望你看到這個。我的第一次嘗試有一個缺陷:) – Amadan 2010-07-07 03:40:49
...正如我的第二個:D – Amadan 2010-07-07 04:01:11