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子句中转换日期格式的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 在 where 子句中更改日期格式以匹配 Carbon::now()