php - 如何查找给定日期最近的第 25 天或第 10 天并将其添加到数据库中

标签 php mysql sql

我们的团队正在为教师开发一个贷款系统,他们的摊销会在发薪日、每月的 10 日和 25 日扣除。提交在线申请表后,贷款表中会有一个 dateapplied 列,用于存储教师申请贷款的日期。我们想要的是根据 dateapplied 找到该月最近的 25 日或 10 日,并将其存储到另一列 startdeduct 中。

例如,教师今天(2015-10-23)申请了一笔贷款,该贷款将存储在dateapplied中。同时我想将 (2015-10-25) 存储在 startdeduct 中,这是何时开始扣除。

谢谢!!!

最佳答案

试试这个:

SELECT dateapplied,
 (CASE WHEN (DAY(dateapplied) > 25) THEN 
     STR_TO_DATE(CONCAT(DATE_FORMAT(dateapplied, '%Y%m'), '10'), '%Y%m%d') + INTERVAL 1 MONTH
  WHEN (DAY(dateapplied) > 10) THEN 
     STR_TO_DATE(CONCAT(DATE_FORMAT(dateapplied, '%Y%m'), '25'), '%Y%m%d')
  ELSE 
     STR_TO_DATE(CONCAT(DATE_FORMAT(dateapplied, '%Y%m'), '10'), '%Y%m%d')
  END) AS `startdeduct`
FROM example  

甚至更短

SELECT dateapplied,
   (STR_TO_DATE(CONCAT(DATE_FORMAT(dateapplied, '%Y%m'), 
   IF(DAY(dateapplied) BETWEEN 11 AND 25, '25', '10')), '%Y%m%d') + 
   INTERVAL IF(DAY(dateapplied) > 25, 1, 0) MONTH) AS `startdeduct`
FROM example

更新表的语句:

UPDATE mydb.loan SET startdeduct = 
    (STR_TO_DATE(CONCAT(DATE_FORMAT(dateapplied, '%Y%m'), 
    IF(DAY(dateapplied) BETWEEN 11 AND 25, '25', '10')), '%Y%m%d') + 
    INTERVAL IF(DAY(dateapplied) > 25, 1, 0) MONTH)

关于php - 如何查找给定日期最近的第 25 天或第 10 天并将其添加到数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33298126/

相关文章:

sql - MySQL如何在单个查询中执行if exist increment

Mysql更新记录出错

sql - NOLOCK 和 UNCOMMITTED 之间有什么区别

mysql - 显示使用 UNION 的查询结果的唯一值( union 返回两列,我想显示一列中的唯一值)

php - php中删除表记录

php - 使用设置的时区扩展 DateTime 对象

php - $_POST var 未填充,而是 $HTTP_RAW_POST_DATA 获取数据

mysql - 仅显示 select SQL 中的前 5 个字符?

php - SQL select 语句中的语法错误

php - 使用 post 和/或 get 在页面上提交帖子并在另一个页面上查看。类似于博客