作者rocairforce (拾貳)
看板Database
標題[SQL ] 計算繳費週期
時間Tue Jun 11 16:02:29 2013
MySql 5.0.x
我只有一張table
=============================
id pay_cycle pay_start
=============================
1 3 1
2 3 5
3 3 6
4 3 8
5 3 3
其中pay_cycle是繳費週期,固定1、3、6、12
ENUM('1','3','6','12')
pay_start是第一次繳費的月份,1-12月
ENUM('1','2','3','4','5','6','7','8','9','10','11','12')
以第一筆來說,第一次是在1月份繳費的,所以繳費的時間會是1、4、7、10月份
計算的方式是這樣,當查詢的月份大於初繳月份時
查詢月份 - 初繳月份 % 週期
當查詢月份小於初繳月份時
初繳月份 - 查詢月份 % 週期
也就是,只要餘數為0,表示這個月需要繳費
假設目前要查的是六月,那第3跟第5應該會是0,不過很奇怪的是
pay_start = 8 卻會是0......
請問是我的語法下錯了嗎?還是我的邏輯錯了,麻煩了,謝謝
以下是我的語法,原本是放在WHERE底下,但為了方便看結果,所以放SELECT裡
整段語法是跑得起來的,如果不行可能是我在這邊打錯
SET @da := 6; /* 查詢月份 */
SELECT
CASE
WHEN CONVERT(`pay_start`,UNSIGNED) <= @da
THEN MOD(
(@da -CONVERT(`pay_start`,UNSIGNED),
CONVERT(`pay_cycle`,UNSIGNED)
)
WHEN CONVERT(`pay_start`,UNSIGNED) > @da
THEN MOD(
CONVERT(`pay_start`,UNSIGNED)-@da,
CONVERT(`pay_cycle`,UNSIGNED)
)
END
FROM
`table_name`
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.174.105.115
※ 編輯: rocairforce 來自: 1.174.105.115 (06/11 16:03)
※ rocairforce:轉錄至看板 PHP 06/11 16:30
1F:→ pooznn:要是我會直接就寫哪幾個月要繳費 省得被這種鳥問題困半天XD 06/11 17:38
2F:→ chenstin:(@da -CONVERT(`pay_start`,UNSIGNED) ← 少一個括弧 06/12 11:05
3F:→ chenstin:另外,照你的資料這個SQL跑出來的結果是正確的耶 06/12 11:07
4F:→ chenstin:你要貼你原本完整的SQL來看看嗎? 06/12 11:07
5F:→ rocairforce:暫時解決了,把UNSIGNED改成CHAR,太詭異了 06/13 12:24