[SQL ] 計算繳費週期

看板Database作者 (拾貳)時間12年前 (2013/06/11 16:02), 編輯推噓0(005)
留言5則, 3人參與, 最新討論串1/1
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

06/11 17:38, , 1F
要是我會直接就寫哪幾個月要繳費 省得被這種鳥問題困半天XD
06/11 17:38, 1F

06/12 11:05, , 2F
(@da -CONVERT(`pay_start`,UNSIGNED) ← 少一個括弧
06/12 11:05, 2F

06/12 11:07, , 3F
另外,照你的資料這個SQL跑出來的結果是正確的耶
06/12 11:07, 3F

06/12 11:07, , 4F
你要貼你原本完整的SQL來看看嗎?
06/12 11:07, 4F

06/13 12:24, , 5F
暫時解決了,把UNSIGNED改成CHAR,太詭異了
06/13 12:24, 5F
文章代碼(AID): #1HjjcNr2 (Database)