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 server 2008 r2中的where语句_Sql_Datetime_Sql Server 2008 R2_Case - Fatal编程技术网

&引用;“动态”;sql server 2008 r2中的where语句

&引用;“动态”;sql server 2008 r2中的where语句,sql,datetime,sql-server-2008-r2,case,Sql,Datetime,Sql Server 2008 R2,Case,我需要根据select语句中的结果传递两个不同的WHERE语句。我的基本查询如下 SELECT table1.taskID, table1.startTime, table1.endTime, table1.everyMinutes, table3.dlid, table3.run FROM table1 JOIN table2 ON table1.taskID = table2.taskID LEFT JOIN table3

我需要根据select语句中的结果传递两个不同的
WHERE
语句。我的基本查询如下

SELECT table1.taskID, 
    table1.startTime, 
    table1.endTime, 
    table1.everyMinutes, 
    table3.dlid, 
    table3.run 
FROM table1
JOIN table2
    ON table1.taskID = table2.taskID
LEFT JOIN table3
    ON table1.taskID = table3.taskID
WHERE table2.active = '1'
ORDER BY taskID ASC
CONVERT(DATE,GETDATE()) IN (SELECT dldate FROM table4 WHERE dlid = table3.dlid)
CONVERT(DATE,GETDATE()) NOT IN (SELECT dldate FROM table4 WHERE dlid = table3.dlid)
我正在努力解决的是,如果
table3.run='1'
,那么我需要包括以下内容

SELECT table1.taskID, 
    table1.startTime, 
    table1.endTime, 
    table1.everyMinutes, 
    table3.dlid, 
    table3.run 
FROM table1
JOIN table2
    ON table1.taskID = table2.taskID
LEFT JOIN table3
    ON table1.taskID = table3.taskID
WHERE table2.active = '1'
ORDER BY taskID ASC
CONVERT(DATE,GETDATE()) IN (SELECT dldate FROM table4 WHERE dlid = table3.dlid)
CONVERT(DATE,GETDATE()) NOT IN (SELECT dldate FROM table4 WHERE dlid = table3.dlid)
如果
table3.run='0'
我需要以下内容

SELECT table1.taskID, 
    table1.startTime, 
    table1.endTime, 
    table1.everyMinutes, 
    table3.dlid, 
    table3.run 
FROM table1
JOIN table2
    ON table1.taskID = table2.taskID
LEFT JOIN table3
    ON table1.taskID = table3.taskID
WHERE table2.active = '1'
ORDER BY taskID ASC
CONVERT(DATE,GETDATE()) IN (SELECT dldate FROM table4 WHERE dlid = table3.dlid)
CONVERT(DATE,GETDATE()) NOT IN (SELECT dldate FROM table4 WHERE dlid = table3.dlid)
最后,如果table3.run='NULL',那么我不需要这两条语句

SELECT table1.taskID, 
    table1.startTime, 
    table1.endTime, 
    table1.everyMinutes, 
    table3.dlid, 
    table3.run 
FROM table1
JOIN table2
     ON table1.taskID = table2.taskID
LEFT JOIN table3
    ON table1.taskID = table3.taskID
WHERE table2.active = '1'
    AND (
            (table3.run = '1' 
             and CONVERT(DATE,GETDATE()) 
             IN (SELECT dldate FROM table4 WHERE dlid = table3.dlid)) 

         or (table3.run = '0' 
             and CONVERT(DATE,GETDATE()) NOT IN 
            (SELECT dldate FROM table4 WHERE dlid = table3.dlid))

         or table3.run = 'NULL'   -- incredibly bad idea
         )
ORDER BY taskID ASC

这是如何处理
table3.run='NULL'
的情况的?仔细看看。OP专门使用字符串
'NULL'
,而不是真正的(TM)
NULL
。您的代码应该使用
table3.run='NULL'
来满足OP,但是您使用了
NULL
的相等性测试,而不是
is NULL
。(我会让你用OP上的湿面条来测试一个空字符串。)@HABO谁会在头脑正常的情况下测试一个值为空的字符串?这几乎和在某些语言中合法的if=then=else一样糟糕。谢谢你的耐心,我正在学习。所以那些看起来像小整数或位的引用值不会打扰你吗?唉<代码>0,
1
错误\u成功