从单个表中进行选择时,如何在 WHERE 子句中选择多列?

How do I select multiple columns in my WHERE clause when selecting from a single table?

提问人:Lilcodemuffin 提问时间:11/17/2023 最后编辑:marc_sLilcodemuffin 更新时间:11/17/2023 访问量:45

问:

我觉得我在这里错过了一些非常简单的东西,我想这样做:

SELECT * 
FROM DATABASE.SCHEMA.TABLE 
WHERE COL1 > DATEADD(day, -2, CONVERT(date, SYSDATETIME()));

它适用于 1 列,但我想从多个列中进行选择,如下所示:

SELECT * 
FROM DATABASE.SCHEMA.TABLE 
WHERE COL1,COL2,COL3,COL4 > DATEADD(day, -2, CONVERT(date, SYSDATETIME()));

我尝试使用 COLUMN IN,但它的语法不正确,我也尝试将它们包含在 () 中,但它也不起作用。WHERE

sql-服务器

评论

0赞 Charlieface 11/17/2023
你想实现什么逻辑?所有这些列都大于日期,还是至少一列?
0赞 Stu 11/17/2023
使用时避免重复表达和使用applyand/or
0赞 Lilcodemuffin 11/17/2023
只是如果至少有 1 列具有更大的日期,而不是所有 4 列的组合
1赞 Brad 11/17/2023
如果您希望 COL1 和 COL2 等与该日期进行核对,则必须单独执行每一列。所以 COL1 >日期和 COL2 >日期等
0赞 Lilcodemuffin 11/17/2023
我尝试这样做:但它说“附近有无效的语法”SELECT * FROM DATABASE.SCEHMA.TABLE WHERE PRCS_DTE > DATEADD(day, -2, CONVERT(date, SYSDATETIME())) OR WHERE EFF_DTE > DATEADD(day, -2, CONVERT(date, SYSDATETIME()))

答:

0赞 Stu 11/17/2023 #1

以下怎么样

select * 
from database.schema.table
cross apply(select DateAdd(day, -2, Convert(Date, SysDateTime())))d(dt)
where col1 > dt or col2 > dt or col3 > dt or col4 > dt;

在 SQL Server 2022 中,还可以执行以下操作

where greatest(col1, col2, col3, col4) > DateAdd(day, -2, Convert(Date, SysDateTime())))

评论

0赞 Lilcodemuffin 11/17/2023
哦,好的,我认为您找到了正确的语法,但是现在我收到一个错误,说“COL2不存在”,所以我想我必须应用您编写的内容,但包括一个IF COLUMN EXISTS语句
0赞 Stu 11/17/2023
我也很想看到一个声明,如果你的表架构是那么不稳定,你不知道你有什么列,你就会遇到更大的问题。if column exists
0赞 T N 11/17/2023
不错的答案,但对于测试,我认为您需要而不是.Any >greatest()least()
1赞 Stu 11/17/2023
@TN Doh,是的,当你一次做太多事情时,就会发生这种情况,谢谢。