gpt4 book ai didi

sql - 如何短路 SQL Where 子句

转载 作者:行者123 更新时间:2023-12-02 12:05:42 24 4
gpt4 key购买 nike

我正在尝试在 SQL Server 中执行以下查询:

declare @queryWord as nvarchar(20) = 'asdas'

SELECT * FROM TABLE_1
WHERE (ISDATE(@queryWord) = 1)
AND TABLE_1.INIT_DATE = CONVERT(Date, @queryWord)

这显然会导致错误,因为 'asdas' 无法转换为 Date。虽然,我期待着不同的行为。也就是说,因为 ISDATE(@queryWord) = 1false,我希望 SQL 检查第二个条件,但显然,它确实如此。

我知道还有其他一些方法可以执行此查询,但这不是我的问题。我想知道是否有某种方法可以在第一个条件不满足时不检查第二个条件。我很好奇,因为我认为 SQL 已经做到了这一点。

最佳答案

SQL Server 不会(也不应该)进行短路。

如果您需要它在某些情况下不尝试某些操作,则需要以编写查询的方式强制执行此操作。

对于此查询,最简单的解决方法是在 WHERE 子句中使用 CASE 表达式。

declare @queryWord as nvarchar(20) = 'asdas'

SELECT * FROM TABLE_1
WHERE TABLE_1.INIT_DATE = (CASE WHEN ISDATE(@queryWord) = 1
THEN CONVERT(Date, @queryWord)
ELSE NULL END)

临时、CASE 和查询嵌套是我能想到的唯一两种受支持的方式来强制对 SQL 中的依赖条件进行求值顺序。

关于sql - 如何短路 SQL Where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19429229/

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