【问题标题】:SQL - char field with date - how to search between two datesSQL - 带日期的字符字段 - 如何在两个日期之间搜索
【发布时间】:2017-07-04 06:49:07
【问题描述】:

我对 SQL 查询有一个简单的问题。我想搜索字段,日期在特定日期和时间开始和结束。

字段定义为 CHAR 并具有结构:DD.MM.YYYY hh:mm:ss,我无法更改它。

我尝试声明一些变量并以此搜索,也尝试通过转换。

这是我尝试过但没有奏效的方法:

SELECT date FROM table WHERE date BETWEEN '1.01.2017 00:00:00' AND '1.02.2017 23:59:59'

SELECT date FROM table WHERE date >= '1.01.2017 00:00:00' AND date <= '1.02.2017 00:00:00'

SELECT date FROM table WHERE date >= Convert(DATETIME, '1.01.2017', 104) AND date <= Convert(DATETIME, '1.02.2017', 104)

在这个查询之后我总是得到所有日期,而不是我问的。

【问题讨论】:

  • 您的第三个查询几乎是正确的,您只需要将日期列转换为 datetime 数据类型。
  • 最后一个查询中的104 是什么? CONVERT 的参数是 (expression, type)
  • 将日期存储为日期
  • @Barmar 如果您询问 104... 我发现这个查询的含义是:Convert(datetime, 'date', style)
  • @Frihu 你确定你在一个关于 MySQL 的页面中找到了它吗?我怀疑这是针对不同的 RDBMS。

标签: mysql sql date char sql-convert


【解决方案1】:

您的字段不是可以按字典顺序作为字符串进行比较的格式,因此您需要将其转换为日期。但它不是 MySQL 默认可以解析的格式(它需要格式为 YYYY-MM-DD 的日期)。所以使用STR_TO_DATE()用格式字符串来解析它。

SELECT date
FROM table
WHERE STR_TO_DATE(date, '%d.%m.%Y %H:%i:%s') BETWEEN '2017-01-01 00:00' AND '2017-01-02 23:59:59'

【讨论】:

  • 是的。把钢琴移到凳子上
【解决方案2】:

我解决了我的问题。问题在于这些字段如何存储在数据库中。 我认为它们是像这样的存储:DD.MM.YYYY hh:mm:ss,但它只是结构。在 DB 中,它们的存储方式如下:YYYYMMDDhhmmss,在 WHERE 查询行更改后,它可以工作。

SELECT date FROM table WHERE date >= '20170101000000' AND date <= '20170101235959'

【讨论】:

    【解决方案3】:
    SELECT date FROM table WHERE STR_TO_DATE(date, '%d.%m.%Y %H:%i:%s') BETWEEN '2017-01-01 00:00:00' AND '2017-02-01 23:59:59'
    

    你可以使用STR_TO_DATE()函数。

    SELECT date FROM table WHERE STR_TO_DATE(date, '%d.%m.%Y %H:%i:%s') BETWEEN STR_TO_DATE('1.01.2017 00:00:00','%d.%m.%Y %H:%i:%s') AND STR_TO_DATE('1.02.2017 23:59:59','%d.%m.%Y %H:%i:%s')
    

    你可以试试上面的查询。

    【讨论】:

    • date 不是DATETIME,而是CHAR,所以这将执行字符串比较,而不是日期比较。
    • dv 只是为了把同一件事说两次
    • @Strawberry 我在 31 分钟前回答过,他有 30 分钟。
    • 重复自己
    • 我在哪里重复了?
    猜你喜欢
    • 2017-01-29
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多