作者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