Sql将记录与两列中的其他记录进行比较
这对你来说可能很简单(但我是初学者) 我有一个名为Sql将记录与两列中的其他记录进行比较,sql,sql-server-2008,Sql,Sql Server 2008,这对你来说可能很简单(但我是初学者) 我有一个名为table_1的表,其中包含以下列: [id] [command] [verify_date] [data_interval_start] [data_interval_end] 表中的数据如下所示: id command verify_date data_interval_start data_interval_end ------------------------------------------------------
table_1
的表,其中包含以下列:
[id]
[command]
[verify_date]
[data_interval_start]
[data_interval_end]
表中的数据如下所示:
id command verify_date data_interval_start data_interval_end
--------------------------------------------------------------------
1 123456 2013-02-01 2013-05-01 2013-05-06
2 234513 2012-05-02 2013-01-01 2013-03-01
3 221342 2013-05-04 2011-01-01 2011-01-02
我想检查verify_date
是否在data_interval_start
和data_interval_end
之间;
因此,取第一个verify\u date
值,并在data\u interval\u start
和data\u interval\u end
之间的所有记录之间检查它
我尝试过此查询,但没有结果:
SELECT command from Table_1
WHERE verify_date IN (data_interval_start, data_interval_end)
SELECT command from Table_1
WHERE verify_date between data_interval_start AND data_interval_end
SELECT command from Table_1
WHERE verify_date = data_interval_start OR verify_date = data_interval_end
感谢您的帮助:)
谢谢我猜您正在比较两个字符串,请尝试将它们转换为日期 那样
select command from Table_1 where convert(CHAR(10),verify_date,111)
between convert(CHAR(10),data_interval_start,111) AND convert(CHAR(10),data_interval_end,111)
假设您的日期是
日期类型字段
,您可以使用案例
,如下所示
select id, command, case when verify_date between
data_interval_start and data_interval_end
then 'Yes'
else 'No'
end isBetween
from table1
如果日期是字符串类型的字段,则将其转换为ISO格式(yyyymmdd
)并转换为日期进行比较,如下所示
select id, command, case when convert(date,replace(verify_date,'-','')) between
convert(date,replace(data_interval_start,'-',''))
and convert(date,replace(data_interval_end,'-',''))
then 'Yes'
else 'No'
end isBetween
from table1
编辑:如果需要比较给定的日期,可以按如下操作。(请注意,中间是包含的。因此,如果需要排除数据\u间隔\u开始
和数据\u间隔\u结束
,请使用
运算符)
要处理所有的变量日期
,可以使用如下所示的交叉连接
select t1.id, t1.command, t2.verify_date
from table1 t1 cross join table1 t2
where t2.verify_date between convert(date, t1.data_interval_start)
and convert(date, t1.data_interval_end)
| ID | COMMAND | VERIFY_DATE |
------------------------------
| 2 | 234513 | 2013-02-01 |
| 1 | 123456 | 2013-05-04 |
您的第二个查询将适用于您
SELECT command from Table_1
WHERE verify_date between data_interval_start AND data_interval_end
id command verify_date data_interval_start data_interval_end
--------------------------------------------------------------------
1 123456 2013-02-01 2013-05-01 2013-05-06
2 234513 2012-05-02 2012-01-01 2013-03-01
3 221342 2013-05-04 2011-01-01 2011-01-02
现在检查上述数据以便确定特定的验证日期是否在所有对(数据间隔开始、数据间隔结束)之间(第二个示例)应该适合您。在您的样本数据中,您没有任何满足条件的记录!Jit B…..是…..示例:
验证2013-02-01是否在所有之间,成对的(数据间隔开始,数据间隔结束)
接下来,验证2012-05-02是否在所有之间,成对的(数据间隔开始,数据间隔结束)等等,它返回0行……就像Jit B所说的那样:目标是找出一个特定的验证日期是否在(数据间隔开始、数据间隔结束)Kaf的所有对之间,但这是错误的,验证日期2013-02-01在第二对记录之间:2013-01-01 2013-03-01您是否在任何开始日期和结束日期之间寻找verify\u date
,而不管它们之间的数据记录关系如何?目的是找出特定的验证日期是否在所有记录对之间(数据\u interval\u start,数据\u interval\u end)这些日期字段的数据类型是什么?您是想筛选这些日期还是只想在新字段中说yes/no
?数据类型是:表1中的datetimeselect命令,其中convert(CHAR(10),verify_date,111)在convert(CHAR(10),data_interval_start,111)和convert(CHAR(10),data_interval_end,111)之间返回0行找到另一个解决方案:select t1.id,t1.command,t2.verify_date from table_1 t1,table_1 t2其中t2.verify_date介于t1.data_interval_start和t1.data_interval_end之间
SELECT command from Table_1
WHERE verify_date between data_interval_start AND data_interval_end
id command verify_date data_interval_start data_interval_end
--------------------------------------------------------------------
1 123456 2013-02-01 2013-05-01 2013-05-06
2 234513 2012-05-02 2012-01-01 2013-03-01
3 221342 2013-05-04 2011-01-01 2011-01-02