如何在MySQL中比较不同格式的字符串作为日期

时间:2018-07-30 15:23:08

标签: mysql

我在mysql表中有一个VARCHAR字段dob,其中日期以两种格式保存:

  

1> y-m-d
  2> d / m / y

现在我要选择dob <= '01/01/1979' (born on or before 01 January, 1979)

的候选人

但是我无法理解如何立即比较这两种时间格式。

有什么方法可以处理,例如将一种格式转换为另一种格式然后进行比较。

3 个答案:

答案 0 :(得分:1)

您当前的表设计不好,因为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');

答案 1 :(得分:1)

我几乎不喜欢编写这段代码,但是...

...
where str_to_date(dob, if(dob like '%/%', '%d/%m/%y', '%y-%m-%d')) <= '01/01/1970'

答案 2 :(得分:1)

您还可以在两种日期格式上使用IFNULLSTR_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';