【问题标题】:Varchar date in SQL querySQL查询中的Varchar日期
【发布时间】:2014-03-11 13:54:06
【问题描述】:

我有一个名为 date_submitted 的 varchar 列,它的格式如下:

2014 年 3 月 6 日下午 4:32

2014 年 2 月 14 日凌晨 2:44

等等……

我想知道如何获取某个日期或 20 天前的所有日期。这个 select 语句符合我的需要。

SELECT date_submitted FROM myTable WHERE date_submitted < 02-14-2014 12:00 am

【问题讨论】:

  • 将日期插入数据库时​​,请正确设置日期格式。
  • 不开玩笑。如果制作这个数据库的人还在这里工作,我会亲自勒死他……
  • 好吧,他们现在不在那里,所以修复它。然后执行您的查询。 CREATE TABLE my_new_table AS SELECT STR_TO_DATE(my_bad_date_column,'%m-%d-%Y %h:%i %p') x FROM my_table;
  • 好点子,我去请老板帮忙。让世界变得更美好的方法,一次一个数据库。

标签: mysql sql date where-clause


【解决方案1】:

DATE_SUB试试这个

  SELECT date_submitted 
  FROM myTable 
  WHERE STR_TO_DATE(date_submitted, '%m-%d-%Y') > DATE_SUB(DATE_FORMAT((NOW(),'%m-%d-%Y'), INTERVAL 20 DAY)

【讨论】:

  • 爱 date_sub,忘记了。感谢 SQL 专业人士的帮助。
【解决方案2】:

您需要像这样适当地CONVERT您的日期时间列:

SELECT date_submitted FROM myTable 
WHERE convert(datetime,date_submitted,100) < DATE_SUB(convert(datetime,'02-14-2014 12:00 am',100), INTERVAL 20 DAY)

【讨论】:

    【解决方案3】:

    你需要这样的东西,否则你会将字符串与日期进行比较,你不会得到好的结果

    SELECT date_submitted 
    FROM myTable 
    WHERE 
    date_format(str_to_date(date_submitted,'%m-%d-%Y %h:%i %p'), '%Y-%m-%d %H:%i:%s')
    >DATE_SUB(NOW(), INTERVAL 20 DAY); 
    

    【讨论】:

      猜你喜欢
      • 2014-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-29
      • 1970-01-01
      相关资源
      最近更新 更多