【问题标题】:SQL Converting the date format in where clauseSQL在where子句中转换日期格式
【发布时间】:2020-09-19 00:57:56
【问题描述】:

尝试使用where exists 子句连接两个表时,但由于我的日期的时间部分,结果不匹配。表 1 中的日期为 2020-09-01 00:00:00,表 2 中的日期为 2020-09-01 12:54:00

如何格式化日期以仅基于 YYYY-MM-DD 匹配?

SELECT * 
FROM  table1 a 
WHERE exists (
    SELECT '1' 
    FROM table2 b 
    WHERE a.company = b.company 
        AND a.emp =b.emp AND a.account_date = b.account_date
    )

【问题讨论】:

  • 请用您正在运行的数据库标记您的问题。日期/时间函数是特定于数据库的:mysql、sqlserver、oracle...?
  • 如果是MySQL,可以使用DATE(a.account_date) = DATE(b.account_date)dev.mysql.com/doc/refman/8.0/en/…。虽然我建议另外将它们创建为新列,以便它们可以利用索引值。
  • Oracle SQL 开发者?这有帮助吗?抱歉,我不太懂技术。
  • “Oracle SQL Developer”就像告诉我们你开的是 Sony,因为那是印在汽车仪表板上的品牌。
  • 大声笑 - 我实际上是一名 BA,我真的不知道有什么区别。如果您在这种情况下有任何好文章可以查看,我们将很乐意查看。

标签: sql oracle datetime subquery where-clause


【解决方案1】:

在Oracle中,你可以使用trunc():

SELECT * 
FROM table1 a 
WHERE exists (
    SELECT 1 
    FROM table2 b 
    WHERE 
        a.company = b.company 
        AND a.emp = b.emp 
        AND trunc(a.account_date) = trunc(b.account_date)
)

如下表达日期条件通常更有效:

WHERE
    ...
    AND b.account_date >= trunc(a.account_date) 
    AND b.account_date < trunc(a.account_date) + 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多