Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql将记录与两列中的其他记录进行比较_Sql_Sql Server 2008 - Fatal编程技术网

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