簡體   English   中英

在SQL Server中針對相同條件比較多個列的速記?

[英]Shorthand to compare multiple columns against same condition in SQL Server?

是否存在使您可以將WHERE子句中的相同條件的多個列進行比較的速記形式?

SELECT * 
FROM [Table]
WHERE [Date1] BETWEEN x AND y
OR [Date2] BETWEEN x AND y
OR [Date3] BETWEEN x and y
OR [Date4] BETWEEN x and y

復制並粘貼此條件並用每列替換[Date x]並不是世界末日,但這肯定不是很有趣。

您也可以這樣編寫查詢(在SQL Server 2008或更高版本中):

SELECT * FROM [Table]
WHERE EXISTS (
    SELECT *
    FROM (VALUES (Date1),(Date2),(Date3),(Date4)) v (TheDate)
    WHERE TheDate BETWEEN x AND y
)

但是,我看不到這樣做的任何好處(就性能或可讀性而言)。

當然,如果您需要寫Date1=x OR Date2=x OR Date3=x OR Date4=x ,情況會有所不同,因為在這種情況下,您可以簡單地寫x IN (Date1, Date2, Date3, Date4)

您可以使用cross applyvalues ,但是結果比現在的代碼還要麻煩:

SELECT * 
FROM [Table]
CROSS APPLY
(
    SELECT  MIN([Date]) As MinDate, 
            MAX([Date]) As MaxDate
    FROM (VALUES ([Date1]), ([Date2]), ([Date3]), ([Date4])) VALS([Date])
)
WHERE MinDate <= y
AND MaxDate >= x
AND x <= y

話雖如此,我同意Sean Lange的評論-似乎表結構設計不當,所有這些日期值都應該放在不同的表中,該表以一對多關系引用了該表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM