作者rocairforce (拾贰)
看板PHP
标题Fw: [SQL ] 计算缴费周期
时间Tue Jun 11 16:30:47 2013
※ [本文转录自 Database 看板 #1HjjcNr2 ]
作者: 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)
※ 发信站: 批踢踢实业坊(ptt.cc)
※ 转录者: rocairforce (1.174.105.115), 时间: 06/11/2013 16:30:47
1F:→ rocairforce:暂时解决了,只是转型为CHAR,我想可能跟我的栏位 06/11 18:53
2F:→ rocairforce:用的是ENUM有关,有空再来研究吧 06/11 18:53