【问题标题】:Mysql select users which have birthday current monthMysql选择当月生日的用户
【发布时间】:2013-07-26 11:18:29
【问题描述】:

我在数据库中的 varchar 列中存储了这样的生日

dd/mm/YYYY

如何直接从 MySQL 查询中选择当月生日的人?

并使用 PHP 显示

谢谢

【问题讨论】:

  • 你能改变数据库吗?或者你做不到,现在正在寻找解决方案?
  • This link 拥有您所需的一切。在继续之前,请花一些时间在这些材料上
  • 检查我的答案可能对你有帮助...!!

标签: mysql


【解决方案1】:
SELECT
    *
FROM
    yourtable
WHERE
    MONTH(STR_TO_DATE(yourdatefield, '%d/%m/%Y')) = MONTH(NOW())

【讨论】:

  • NOW() 是一个函数,而不是一个常数。
  • 但这仍然是最好的答案
  • @jaczes,它确实回答了 current 问题。但 best 值得商榷。
  • @PauloJoséOliveiraRosa 也许是因为我用括号打错了,所以没用?让我知道你的表结构。必须工作。
  • 数据以dd/mm/YYYY这种格式存储在varchar colmun中
【解决方案2】:

首先,不要将日期存储为VARCHARConvert itDATE

修复后,使用众多 MySQL date time functions 之一:

SELECT * FROM users WHERE MONTH(birthday) = MONTH(NOW());

【讨论】:

  • 对转换有帮助吗?
  • 检查链接或进行谷歌搜索。但是您需要添加一个新的date 列,将varchar 迁移到date,然后删除旧的varchar 列。如有必要,重命名新的 date 列。
【解决方案3】:

假设日期以%m/%d/%Y这种格式存储,您可以根据需要更改此格式。

%m 我们只选择月份并将其与当前月份MONTH(NOW()) 进行比较。

DOB 替换为您的列,将table 替换为您的表名

select * from table
  where date_format(str_to_date(DOB, '%m/%d/%Y'), '%m') = MONTH(NOW());; 

【讨论】:

    【解决方案4】:

    您应该将列类型更改为DATE。例如

    ALTER TABLE `people` CHANGE  `dob` `dob` DATE NOT NULL;
    

    通过这样做,您可以使用 MySQL 查询日期函数来过滤结果。

    SELECT * FROM people WHERE MONTH(dob) = MONTH(CURDATE()) AND YEAR(dob) = YEAR(CURDATE())
    

    【讨论】:

    • 只有当您希望某人出生在特定年份和月份,而不仅仅是月份时,才需要年份部分
    • @Garytje 我将“当前月份”解释为我们当前所在的月份(即今年)
    【解决方案5】:
    For Get User list whose birthday in current month in mysql if field datatype is date 
            $Toaday = '%'.date('-m-').'%';
    
            $query = " select * from client where birth_date LIKE '$Toaday' ";
    
        In your case declare $Today = '%'.date('/m/').'%';
    

    【讨论】:

      【解决方案6】:

      当您使用 VARCHAR 字段而不是 DATE 字段时,

      您必须转换值,然后使用正常的日期函数。喜欢

      SELECT * 
         FROM table_name 
         WHERE MONTH(CAST(col_name AS DATE)) = MONTH(NOW());
      

      【讨论】:

        【解决方案7】:

        我将日期作为时间戳存储在表中,因此我创建了这样的查询。它工作正常。

        不要使用 varchar 作为日期。

        select first_name, last_name, date_format(FROM_UNIXTIME(`dateofbirth`), '%m/%d/%Y') as dob from users where date_format(FROM_UNIXTIME(`dateofbirth`), '%m') = MONTH(NOW())
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-26
          • 1970-01-01
          • 2015-04-09
          • 1970-01-01
          相关资源
          最近更新 更多