标签: date

MySQL - 如何在几年内制作 DATEDIFF?

这是我的第一篇文章(英语不是我的母语)所以我希望我不会把这篇文章搞砸。

我是 MySQL 的新手,但我从 100 多个 youtube 教程和您的大量帖子中学到了很多东西。我使用 PHPmyadmin 和 MySQL Workbench 设计了我的数据库。

在我的表subventions(grants) 中,我创建了一个触发器,以便能够使用我的列subventions.début(beginning)、subventions.fin(end) 和subventions.montant(amount)来计算每年的赠款金额。

因为DATEDIFF只给了我几天的答复,我天真地以为我只需要除以365天就能得到我的答复。如果我的开始日期是 1 月 1 日,结束日期是 12 月 31 日,它会起作用,但如果它在一年中的其他地方出现,则不起作用。这是我的触发器:

SET NEW.montant_annuel = NEW.montant / (datediff(NEW.fin,NEW.début)/365)
Run Code Online (Sandbox Code Playgroud)

这是我的表格和“montant_annuel”列中的结果: 表 : 补助金

如果我使用 365.25(这是一年中的“真实”天数),它也不起作用。

谢谢!:)

mysql trigger date

3
推荐指数
1
解决办法
2万
查看次数

根据 15 分钟的间隔获取计数

我有一个包含通话记录的表:

tbl_calls

cl_Id
cl_StartDate
cl_endDate
Run Code Online (Sandbox Code Playgroud)

我传递两个参数@StartDate@EndDate给我的存储过程。

我的要求是在每 15 分钟的持续时间内获取通话记录的数量。

例如,如果:

@StartDate = '2015-11-16 00:00:00.000', 
@EndDate = '2015-11-16 23:59:00.000'
Run Code Online (Sandbox Code Playgroud)

输出应该是:

Date                        Count
2015-11-16 00:00:00.000      10(Count of startDate between '2015-11-16 00:00:00.000' AND '2015-11-16 00:15:00.000')
2015-11-16 00:15:00.000       7(Count of startDate between '2015-11-16 00:15:00.000' AND '2015-11-16 00:30:00.000')
2015-11-16 00:30:00.000      50(Count of startDate between '2015-11-16 00:30:00.000' AND '2015-11-16 00:45:00.000')

upto @EndDate
Run Code Online (Sandbox Code Playgroud)

我已经尝试了以下查询,但它不能正常工作。有一个更好的方法吗?

DECLARE @StartDate DATETIME = DATEADD(DAY,-1,GETUTCDATE()),
        @EndDate DATETIME = GETUTCDATE()

SELECT New 
FROM
    (SELECT 
         (CASE 
             WHEN cl_StartTime BETWEEN @StartDate AND …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2008-r2 count date

3
推荐指数
1
解决办法
3万
查看次数

在 PostgreSQL 中添加工作日

我正在尝试找到一种将工作日添加到任何日期的方法。一个例子是:

date = '2017-04-28'  (It was a Friday)

date + 2 = '2017-05-02' (It skipped Saturday and Sunday)
Run Code Online (Sandbox Code Playgroud)

有没有办法在没有自定义查询的情况下做到这一点?

postgresql date

3
推荐指数
1
解决办法
1万
查看次数

选择前 3 个月的数据

我需要帮助选择日期在前 3 个月内的数据。(注意:我不是要求过去 3 个月即DATEADD(MONTH, -3, GETDATE())

我不想使用 DATEADD 方法的原因是这个查询可以在月中运行,我不希望它返回到那个点之前的数据

sql-server t-sql date

3
推荐指数
1
解决办法
3万
查看次数

选择距离到期日期时间为 3 天的记录

我有一个包含datetime timestamp. 我正在寻找的是根据datetime timestamp.

这是我到目前为止所拥有的,尽管我认为它不正确:

    SELECT jobs.*,occupations.title
    FROM jobs
    LEFT JOIN occupations on occupations.id = jobs.occupation_id
    WHERE DATE_ADD(jobs.`date_created`,INTERVAL 27 DAY) = DATE(NOW())
Run Code Online (Sandbox Code Playgroud)

请帮忙 :)

mysql datetime date

2
推荐指数
1
解决办法
2万
查看次数

在 where 子句中使用日期时间和日期数据类型时是否有截止时间?

我有一个标题为reached_date的列。在我的查询中,该列的大部分值是2016-09-30 23:59:59.997

然后我有一个 where 子句,内容如下:

WHERE achieved_date between '20160901' and '20160930'
Run Code Online (Sandbox Code Playgroud)

具有 2016-09-30 23:59:59.997 值的记录没有包含在我应该包含的结果中。我的意思是交易记录在 9 月 30 日。

如果这是一个奇怪的数据类型问题,有什么想法吗?

sql-server datatypes t-sql datetime date

2
推荐指数
1
解决办法
106
查看次数

查询日期范围

我有一个存储过程,我想第一次在@startdate&之间收集数据,@enddate然后我想将该数据与前一年进行比较。

我尝试了以下语法(显然是为了测试)以确保在添加到我的生产语法之前我得到了我想要的日期输出。但是,这给了我一个错误

消息 102,级别 15,状态 1,第 11 行
“-”附近的语法不正确。
消息 102,级别 15,状态 1,第 14 行
“-”附近的语法不正确。

这是我尝试的语法。为了输出所需的日期,我会改变什么?

Declare @startdate date = '20170101'
    ,@enddate date = '20170212'

--one year prior to @startdate
Select CAST(DateAdd(yy, -1, @startdate) As Date)

--One year prior to @enddate
SELECT CAST(DateAdd(yy, -1, @enddate) As Date)

--This will get first day of prev yr
SELECT DATEADD(YEAR, DATEDIFF(YEAR, 0,
        DATEADD(YEAR, –1, @startdate)), 0)

--This will get last day of prev yr
SELECT DATEADD(MILLISECOND, –3, DATEADD(YEAR, …
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql sql-server-2008-r2 date

2
推荐指数
1
解决办法
443
查看次数

选择合适的数据类型时的时区注意事项

我们目前正在为我们的定制应用程序开发一个任务管理系统。经过深思熟虑,我们得出的结论是,我们只需要用户指定任务的截止日期。

我想知道当英国的用户添加任务并且圣彼得堡的用户看到它时它会如何工作,考虑到圣彼得堡比英国早至少 2 小时。

假设英国的用户创建了一个 20/Apr/2018 到期的任务。4 月 19 日 23:30(英国时间),圣彼得堡的一位用户打开了任务。但是,由于在圣彼得堡已经是 20/Apr,看起来任务已经完成,但实际上还没有安排运行。

如果日期字段实际上是 type date,我很确定圣彼得堡的用户会看到标记为过期的任务,因为他结束时已经是 20/Apr。

我见过其他几个任务工具,而且几乎所有工具都只允许任务的截止日期(而不是时间)。然而,我想知道其他系统如何处理此类问题,或者他们是否根本不打扰。

所以客观地回答我的问题:

  • 我们承认这种差异并接受它。如果任务将于 4 月 20 日到期,并且在澳大利亚已经是 4 月 20 日,但在加利福尼亚州尚未到期,我们只接受澳大利亚用户将任务视为迟到而加利福尼亚用户将其视为“进行中”。
  • 我认为解决这个问题的唯一方法是在datetime字段中捕获日期(即使我们不允许用户输入时间),然后还允许定义时区。

我错过了什么吗?

编辑:为了回答有关我们是否希望任务的截止日期遵循查看任务的用户的时区或创建任务时的固定时区的问题,我们选择了固定时区。因此,任务将设置为英国时间 20/Apr 到期,只有在英国时间达到 YYYY-04-20 00:00:00.00 时才会到期。

为了支持这一点,我们将允许用户在创建任务时单击截止日期字段旁边的小图标,允许他们选择时区。时区将根据以下工作流程设置为默认值:

时区计算工作流程

我们将为用户的帐户页面创建两个设置,允许用户:

  • a) 切换应用程序的选项以尝试从客户端自动获取其时区。

  • b) 让他们选择默认时区的选项。

基于这个要求,我们几乎可以得出结论,date数据类型是不可能的。现在对我来说不是 100% 清楚的是我们应该选择 a datetime2(我总是使用datetime2而不是datetime)还是 a datetimeoffset

sql-server datetime date

2
推荐指数
1
解决办法
107
查看次数

如何向时间戳列添加日/夜指示器?

timestamp我用一列来指示一行是在白天还是晚上创建的。我的代码如下,但由于某种原因,我只得到“DAY”作为结果。我没有正确格式化值吗?

select record_id, rec_date,
       case when date_part('hour', rec_date) between 20 and 07 then 'Night'
            else 'Day' end as Indicator
from records;      
Run Code Online (Sandbox Code Playgroud)

rec_date列是一个时间戳,我可以在其中看到诸如2019-11-20 21:34:02.000000- 之类的值,它应该得到一个'Night'指标。

postgresql query date-format date date-math

2
推荐指数
1
解决办法
784
查看次数

如何在 SQL (Firebird) 中获取下周的日期?

我想使用 SQL 语句获取日期。例如,如果日期是“2018-08-07”输出,则应返回:“2018-08-14”(一周后)。然后我将获取这些日期之间的总行数。

SELECT count(*) FROM orders  WHERE dates BETWEEN '2018-08-07'  AND 
DATEADD(day,7,'2018-08-07');
Run Code Online (Sandbox Code Playgroud)

但是,由于 dateadd() 函数,我收到此错误:

SQL Error [335544634] [42000]: Dynamic SQL Error; SQL error code = -104; Token unknown - line 1, column 1; DATEADD [SQLState:42000, ISC error code:335544634]
Run Code Online (Sandbox Code Playgroud)

select firebird date

2
推荐指数
1
解决办法
651
查看次数