gpt4 book ai didi

sql - 如何使用 SQL 选择多个日期

转载 作者:行者123 更新时间:2023-12-03 15:11:54 26 4
gpt4 key购买 nike

我需要在特定日期从特定用户的表中选择数据。我不确定我的代码有什么问题。

这是我的代码:

select k.info, z.mes_user, z.mes_date, m.val_user, m.val_date
from table_K k
left join table_M m on k.key1 = m.key1
left join table_Z z on m.key1 = z.key1 and m.key2 = z.key2
where (m.val_user like '%Username%' or z.mes_user like '%User-ID%') and
(
z.mes_date like '%18.04.17%' or
z.mes_date like '%20.04.17%' or
m.val_date like '%18.04.17%' or
m.val_date like '%20.04.17%');

错误可能出现在 where 子句中。

“用户名”和“用户 ID”只是代码的占位符。 mes_date的数据类型和 val_date是日期。

最佳答案

The data type of mes_date and val_date are date.



使用 z.mes_date like '%18.04.17%'正在对日期执行字符串比较,实际上与以下内容相同:
TO_CHAR(
z.mes_date,
( SELECT value FROM NLS_SESSION_PARAMETERS WHERE parameter = 'NLS_DATE_FORMAT' )
) like '%18.04.17%'
NLS_DATE_FORMAT session 参数是每个用户的设置,可以由每个用户更改。做 不是 依靠它保持一致和不变 - 存在一些非常难以调试的错误,其中一个用户更改设置并且突然您的查询中断而查询没有更改。

更好的解决方案是:
TRUNC( z.mes_date ) IN ( DATE '2017-04-18', DATE '2017-04-20' )

但这会阻止您在 z.mes_date 上使用索引。并且需要基于函数的索引 TRUNC( z.mes_date ) .

您还可以使用:
   ( z.mes_date >= DATE '2017-04-18' AND z.mes_date < DATE '2017-04-18' + 1 )
OR ( z.mes_date >= DATE '2017-04-20' AND z.mes_date < DATE '2017-04-20' + 1 )

这将允许在 mes_date 上使用索引.

关于sql - 如何使用 SQL 选择多个日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46212473/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com