如何将SQL短路的短路
发布时间:2021-01-17 16:39:10 所属栏目:MsSql教程 来源:网络整理
导读:我试图在SQL服务器中执行以下查询: declare @queryWord as nvarchar(20) = 'asdas'SELECT * FROM TABLE_1 WHERE (ISDATE(@queryWord) = 1) AND TABLE_1.INIT_DATE = CONVERT(Date,@queryWord) 这显然会导致错误,因为’asdas’无法转换为Date.虽然,我期待一种
|
我试图在SQL服务器中执行以下查询: 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)= 1是假的,我期望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 – 在视图中转换科学记数法(来自varchar – gt;数字)
- 如何在SQL select语句中动态创建列
- 标记语言——锚点
- sql-server – 有没有办法阻止计算列中的标量UDF抑制并行性
- sql-server – 如何在Sql Server 2005上获取最后一次插入/更
- sql-server – 链接服务器问题.无法使用Windows身份验证作为
- sql-server-2008 – 编写SQL查询的最佳方法,该查询检查列是
- 数据库设计 – 轮询是从数据库更新应用程序数据的唯一方法吗
- 详解HTML中字体使用line-height依然不能垂直居中解决办法
- SqlDateTime溢出是什么原因?如何解决?

