首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果当天不生成任何文件,如何在sql数据库中跳过一天到前一天。

如果当天不生成任何文件,如何在sql数据库中跳过一天到前一天。
EN

Stack Overflow用户
提问于 2016-02-08 10:26:55
回答 4查看 1.1K关注 0票数 0

如果前一天是星期天,我需要打印当前日的文件,加上before...but日的文件,然后打印星期六的文件。

我有一个数据库,其中包含一个month..each日的文件,生成一些文件,但是星期日是一个假日,在那一天没有文件是generated.now,我已经执行了查询,以这样的方式选择文件,以便给出当前日期将得到当天和前一天的文件。但问题是在周一,当我给出当前的日期时,它会产生周一和周日的文件.我不想打印星期日的文件,因为它是空的,而不是当我给当前日期如果是星期一,我应该得到星期六的文件,而不是星期一。这是现在正在使用的代码

代码语言:javascript
运行
复制
select files from table1 where [date]>=DATEADD(DAY,DATEDIFF(DAY,0,GETDATE()-1),0) "; 

除了星期天,我每天都要输入档案。

代码语言:javascript
运行
复制
 insert into dbtable(date,files) values('date value',' filename');
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-02-08 10:45:13

尝试使用MySQL函数DAYNAME(date1)来检查日期是否为sunday,如果是的话,则得到两天而不是一天的差。

代码语言:javascript
运行
复制
mysql> SELECT DAYNAME(GETDATE());
+-----------------------+
| DAYNAME('2008-05-15') |
+-----------------------+
| Thursday              | 
+-----------------------+
1 row in set (0.01 sec)

如果使用的是SQL server,则可以尝试datename函数获得日期名称:

代码语言:javascript
运行
复制
datename(dw,getdate()) 

为Server尝试此操作:

代码语言:javascript
运行
复制
SELECT files from table1 
where [date]>=DATEADD(DAY,case when datename(dw,(GETDATE()-1))='SUNDAY' THEN -2 ELSE -1 END,getdate());

对于MySQL服务器,请尝试:

代码语言:javascript
运行
复制
SELECT files from table1 
where `date`>=DATE_SUB(current_Date,interval (case when DAYNAME(date_sub(current_date,interval 1 day))='SUNDAY' THEN 2 ELSE 1 END) day);
票数 0
EN

Stack Overflow用户

发布于 2016-02-08 10:50:16

寻找两个日期,当前和之前的日期。从这些记录中拿出新的。

代码语言:javascript
运行
复制
select files
from table1 
where date =
( 
  select max(date) 
  from table1
  where date in (getdate(), getdate() - interval 1 day)
);

(关于守则的更新-Monk的评论。谢谢。)

这是标准的SQL,除了特定于MySQL的日期操作。如果您错误地使用了标记的DBMS,那么将从当前日期减去日期的部分替换为适合您的DBMS的部分。)

更新:您希望从两天中选择的,即currect日和前一天的最后一个日期。由于不应该有未来的记录,这通常意味着表中的两个最大日期。

使用ORDER和altered进行稍微修改的查询:

代码语言:javascript
运行
复制
select files
from table1 
where date in
( 
  select date
  from table1
  order by date desc limit 2
);
票数 1
EN

Stack Overflow用户

发布于 2016-02-08 10:53:05

假设您使用的是Server (而不是MySQL),则可以使用交叉应用程序获取文件的最后两个日期的数据:

代码语言:javascript
运行
复制
SELECT  *
FROM   dbo.table1 o
       CROSS APPLY ( SELECT TOP 2 [date]
                     FROM     dbo.table1 i
                     GROUP BY [date]
                     WHERE [date]>=DATEADD(DAY,DATEDIFF(DAY,0,GETDATE()-5),0)
                     ORDER BY  [date] DESC
            ) det
WHERE det.[date] = o.[date]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35267336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档