[英]Compare multiple columns in sql
我在表中有3个日期列,创建,最后修改和采取操作的日期。 我正在尝试编写一个查询,比较所有这些日期,而不必将其写出3次不同的时间。
我想是这样的,我尝试了一些变体,但是我的努力并没有在网上找到它(这可能是因为通用的措辞)。
select * from table
where (DateTimeInspected and DateTimeModified and DateTimeCreated) between '11/01/2012' and '11/01/2013'
通过比较日期,您应该了解上限。 如果您写<= "2013-11-20"
,将不会获得日期为2013-11-20
任何数据。 因此,您必须编写<= "2013-11-20 23:59:59"
甚至更好的< "2013-11-21"
。
接下来,您必须为要检查的每一列扩展where和use之间的位置:因此,SQL查询应如下所示:
SELECT * FROM table
WHERE DateTimeInspected BETWEEN '11/01/2012' AND '11/01/2013'
AND DateTimeModified BETWEEN '11/01/2012' AND '11/01/2013'
AND DateTimeCreated BETWEEN '11/01/2012' AND '11/01/2013'
注意: column BETWEEN value1 AND value2
之间的column >= value1 AND column <= value2
等于column >= value1 AND column <= value2
您可能想要以下内容:
如果要在日期之间选择其中之一:
SELECT YourField
FROM TABLE
WHERE (DateTimeInspected BETWEEN '11/01/2012' AND '11/01/2013')
OR (DateTimeModified BETWEEN '11/01/2012' AND '11/01/2013')
OR (DateTimeCreated BETWEEN '11/01/2012' AND '11/01/2013')
不过请注意DateTime字段和BETWEEN,因为您未在'11 / 01/2013'中指定时间,因此SQL会假设您的意思是'11 / 01/2013 00:00:00'。 如果开始日期和结束日期是参数,则可以根据需要添加一天来解决此问题。
OR (DateTimeCreated BETWEEN '11/01/2012' AND DATEADD(day, 1, '11/01/2013') )
单程
SELECT *
FROM YourTable
WHERE EXISTS (SELECT *
FROM (VALUES(DateTimeInspected),
(DateTimeModified),
(DateTimeCreated)) V(D)
WHERE V.D >= '20121101'
AND V.D < '20131101')
您应该使用明确的datetime
格式,例如yyyymmdd
和BETWEEN
可能无法满足您的需求。
我想这个问题是关于如何一次优化3个日期的检查边界。
在这种情况下,可以创建自己的特定内联函数来验证所需条件。 它将允许您重用该功能,并有可能在单个位置进行更改:
CREATE FUNCTION [dbo].[fnDateTimeBetween](
@startDate datetime,
@endDate datetime,
@datetime1 datetime,
@datetime2 datetime,
@datetime3 datetime)
返回位
如
开始
DECLARE @result bit = 0
SELECT @result = 1
WHERE @datetime1 BETWEEN @startDate AND @endDate
AND @datetime2 BETWEEN @startDate AND @endDate
AND @datetime3 BETWEEN @startDate AND @endDate
RETURN @result
结束
然后,您将可以像这样使用它:
SELECT dbo.fnDateTimeBetween('11/01/2012', '11/01/2013', '11/02/2012', '11/02/2012', '11/02/2012')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.