【问题标题】:How can I compare date string to datetime column in my database如何将日期字符串与数据库中的日期时间列进行比较
【发布时间】:2020-01-24 11:01:32
【问题描述】:

我有一系列看起来像这样的日子:

Array
(
    [0] => "18/09/2019"
    [1] => "19/09/2019"
    [2] => "20/09/2019"
    [3] => "21/09/2019"
    [4] => "22/09/2019"
    [5] => "23/09/2019"
    [6] => "24/09/2019"
)

我的数据库中有一个 date 列,其中包含 DATETIME 值,例如:2019-09-18 00:00:00

现在我想从我的orders 表中全选,例如date = 18/09/2019

我该怎么做?

我尝试了以下方法,但这给了我一个语法错误:

SELECT * FROM `orders` WHERE date = CONVERT(DATETIME, '24/09/2019')

我正在使用 MYSQL。

【问题讨论】:

  • SQL 没有称为“数组”的内置类型——尽管有些数据库有。如果没有数据库标签和数组来自何处的解释,您的问题就不清楚。您还应该指定语法错误是什么。
  • @GordonLinoff 我知道,但是下面显示的示例查询是我最终检查数据库的方式,因此数组不是 100% 相关的,这就是我正在尝试的日期的样子与我的数据库中的 DATETIME 值进行比较
  • @jarlh 我有一个 SQL 标签,但为了清楚起见,我在我的问题中添加了它
  • SQL 是许多产品支持的语言,有不同的变体。那么您使用的是哪个 dbms? (您可能是指 MS SQL Server 吗?)
  • 你应该看看str_to_date

标签: mysql sql database date type-conversion


【解决方案1】:

MySQL 的答案:

您必须使用 DATE() function 将您的 DATETIME 列值转换为 DATE 值,然后使用带有适当映射的 STR_TO_DATE 函数将它们与您的数组值进行比较:

SELECT * 
  FROM orders 
 WHERE DATE(date) = STR_TO_DATE(array_member, '%Y-%m-%d')

【讨论】:

    【解决方案2】:

    Oracle 数据库的答案:

    您必须首先将您的 DATETIME 列值截断为 DATE 值,然后使用带有适当映射的 TO_DATE 将它们与您的“数组”值进行比较:

    SELECT * 
      FROM orders 
     WHERE TRUNC(date) = TO_DATE(array_member, 'YYYY-MM-DD')
    

    注意:我在 OP 说他在 MYSQL 工作之前发布了这个答案。不过,我将把它留给那些偶然发现相同问题并寻找答案的 Oracle 用户。

    【讨论】:

    • 既然您已经发布了 MySql 的正确答案,那么请删除这个答案,因为我们不鼓励对一个问题发布多个答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多