我在 mysql 表中有一个 VARCHAR 字段dob,其中日期以两种格式保存:
1> yd
2> 日/月/年
现在我要选择的候选人dob <= '01/01/1979' (born on or before 01 January, 1979)
但我无法理解如何一次比较这两种时间格式。
有什么方法可以处理这个问题,比如将一种格式转换为另一种格式,然后进行比较。
我在 mysql 表中有一个 VARCHAR 字段dob,其中日期以两种格式保存:
1> yd
2> 日/月/年
现在我要选择的候选人dob <= '01/01/1979' (born on or before 01 January, 1979)
但我无法理解如何一次比较这两种时间格式。
有什么方法可以处理这个问题,比如将一种格式转换为另一种格式,然后进行比较。
您当前的表格设计很糟糕,因为该dob列是:
您绝对应该通过将日期信息存储在适当的日期/时间列中来解决这个长期问题。
这是一种临时解决方法:
SELECT *
FROM yourTable
WHERE
(dob LIKE '%-%' AND STR_TO_DATE(dob, '%Y-%m-%d') < '1979-01-01') OR
(dob LIKE '%/%' AND STR_TO_DATE(dob, '%d/%m/%Y') < '1979-01-01');
我几乎讨厌写这段代码,但是......
...
where str_to_date(dob, if(dob like '%/%', '%d/%m/%y', '%y-%m-%d')) <= '01/01/1970'
您还可以在两种日期格式上使用IFNULL和STR_TO_DATE :
SELECT
IFNULL(STR_TO_DATE(col_, '%Y-%m-%d'), STR_TO_DATE(col_, '%m/%d/%Y')) AS 'my_date'
, col_
FROM
date_test
WHERE
IFNULL(STR_TO_DATE(col_, '%Y-%m-%d'), STR_TO_DATE(col_, '%m/%d/%Y')) <= '1979-01-01';