[英]Compare the values within the same column against other columns in 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 apply
和values
,但是結果比現在的代碼還要麻煩:
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.