我的SQL-如何在不同的工作日上运行不同的SELECT / WHERE语句,例如一个在星期一,另一个在星期五

问题描述 投票:0回答:6

我误会了很多,再次感谢您的所有帮助。最终,我找到了解决方案,甚至没有涉及如果星期一,然后选择我什至不需要CASE语句。

我要做的是在不同的WHERE语句之间插入一个OR。

我在下面说了一个例子:

SELECT 
    * 
FROM 
    aipheader t
WHERE 
    DATEPART(DW, GETDATE()) = 4 AND 
    t.pay_date BETWEEN DATEADD(DAY,-6,GETDATE()) AND 
    DATEADD(DAY,-1,GETDATE())
OR
    DATEPART(DW, GETDATE()) = 5 AND 
    t.pay_date   BETWEEN DATEADD(DAY,-3,GETDATE()) AND 
    DATEADD(DAY,-1,GETDATE())

上面的语句将执行正确的OR块,在我的情况下,它是平日的。

*********下面的旧问题*************

我想在一周的不同日期运行不同的SELECT语句。

我实际上可以使以下代码起作用:

select 
   case 
      when DATEPART(DW, GETDATE()) = 4 then 
         (select 'HELLO' ) 
      ELSE 
         (select 'GOODBYE') 
   end

[星期三,上​​面的代码返回“ HELLO”,每隔一个工作日它将返回“ Goodbye”。到目前为止一切顺利!

只要select语句仅返回一个值,它就可以正常工作,但是我确实想要一个完整的表,如下所示。

这里唯一的区别应该是[* FROM table]部分,并且将其全部打破:

select 
   case 
      when DATEPART(DW, GETDATE()) = 4 then 
         (select * FROM table1) 
      ELSE 
         (select * FROM table2) 
   end

如果我什至不能使以上工作正常进行,那么我将无法在不同的工作日进行不同的选择,因此很难确定。

我试图用()封装事物,并以不同的方式添加一些SELECT,但它不起作用,因此它可能是一些SQL主体。

我收到一个错误提示,如果仅返回一个值,这是可以的:

SqlState 37000本机116 [Microsoft] [ODBC SQL Server驱动程序] [SQL服务器]在以下情况下,只能在选择列表中指定一个表达式子查询未使用EXISTS引入。

感谢所有我现在对它有所了解的答复。

我不想添加一列,我可以创建一个全新的SELECT语句。正如您所指出的,我现在看到我的CASE语句仅添加了一个列。

因此,我的第一个想法可能是更好的方法,实际上是在select语句中修改WHERE子句。

我现在已经尝试过,但是不起作用。

SELECT * FROM aipheader t
   WHERE 
     CASE 
         WHEN DATEPART(DW, GETDATE())  = 4 THEN 
           t.pay_date = '2019-10-15'
         ELSE
           t.pay_date = '2019-10-17'
      END 

它返回错误:

SqlState 37000本机102 [Microsoft] [ODBC SQL Server驱动程序] [SQL服务器]“ =”附近的语法不正确。

我尝试过更简单的方法:

SELECT * FROM aipheader t
   WHERE 
     t.pay_date BETWEEN DATEADD(DAY,-120,GETDATE()) AND DATEADD(DAY,-5,GETDATE())

以上是一种较简单的形式,但是该形式返回正确的值。但是,有人认为带有CASE子句的人返回有关“ =“-sign。]的错误。

Maybee WHERE语句中的CASE部分无效。

我误会了很多,再次感谢您的所有帮助。我最终为我的案子找到了解决方案,它甚至不涉及IF Monday THEN SELECT之类的东西,我什至不需要CASE -...

sql sql-server select case getdate
6个回答
0
投票

编辑后,正确的日期过滤方法如下:


0
投票

我不完全了解您要实现的目标。当然,您的语句将不起作用,因为select中的case when语句返回多个列和行。那是行不通的,因为您的case when语句将显示一个列


0
投票

这是您在寻找吗?子查询应返回1行并指定col名称


0
投票
对于每个CASE WHEN

THEN只能返回单个值


0
投票

查询必须返回之前已知的列。如果表table1table2的列不同,则无法编写一个查询,该查询一天返回表1的五列,而表2的另一列则返回九。

但是,只要结果列保持不变,就可以选择加入。这是一个小例子:


0
投票

不确定我是否真的了解您要在这里实现的目标。此示例假设您基于日期从不同的表中读取数据,并将返回两个表中的所有行:

© www.soinside.com 2019 - 2024. All rights reserved.