SQL在where子句中转换日期格式

Posted

技术标签:

【中文标题】SQL在where子句中转换日期格式【英文标题】:SQL Converting the date format in where clause 【发布时间】: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,我真的不知道有什么区别。如果您在这种情况下有任何好文章可以查看,我们将很乐意查看。 【参考方案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

【讨论】:

以上是关于SQL在where子句中转换日期格式的主要内容,如果未能解决你的问题,请参考以下文章

SAS:在where子句中将日期时间转换为日期

Laravel 在 where 子句中更改日期格式以匹配 Carbon::now()

where 子句中的日期时间

2017-07-12(数据库)

ASP - 从 MS Access DB 获取记录时遇到日期格式(在 WHERE 子句中)

您如何编写一条SQL语句来为日期值创建新列,然后在WHERE子句中查询它