gpt4 book ai didi

java - 这个简单查询中正确的 where 条件..我缺少什么?

转载 作者:太空宇宙 更新时间:2023-11-04 09:32:14 27 4
gpt4 key购买 nike

可能是一个微不足道的问题,但我可能太专注于当前的解决方案,以至于我无法想到其他任何东西。

我有这个查询(它比这个大得多,我只是为了让它更容易阅读)。

 SELECT FISCAL_CODE, NAME, SURNAME,
FROM TABLE
WHERE
(FISCAL_CODE = ? OR (SURNAME LIKE ? AND NAME LIKE ? ))
AND TO_DATE(TO_CHAR(DOB, 'DD/MM/YYYY'), 'DD/MM/YYYY') >= TO_DATE(?, 'DD/MM/YYYY')

我的用户现在在开始查询之前有两种情况

  1. 他只能输入财务代码
  2. 他可以同时输入名字、姓氏和出生日期

我不能简单地对 dob 进行 = 检查,因为如果用户仅搜索 fiscal_code,那么来自用户的 dob 将为空,从而导致某些搜索结果被错误地省略。

所以我想出了这个 >= 解决方案:现在,如果用户仅搜索财务代码,则从 Java 我设置 ? dob 的参数为 01/01/1000,因此将检索具有该特定财务代码 + dob 晚于 01/01/1000 的任何记录(在我的数据库中始终如此)。

这种方法的问题在于,在我的数据库中也有人没有财务代码,因此如果用户搜索姓名和出生日期,并且有人具有相同的姓名+姓氏但出生日期不同,那么将检索与另一个不相关的人相关的行(因为他的出生日期当然也会晚于 01/01/1000,而我不想这样做。

有什么提示吗?

最佳答案

您需要修正括号:

SELECT FISCAL_CODE, NAME, SURNAME,
FROM TABLE
WHERE (FISCAL_CODE = ?) OR
(SURNAME LIKE ? AND
NAME LIKE ? AND
DOB >= TO_DATE(?, 'DD/MM/YYYY')
);

绝对没有理由将 DOB 转换为字符串只是为了将其转换回日期。

关于java - 这个简单查询中正确的 where 条件..我缺少什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56955111/

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