这是我的第一篇文章(英语不是我的母语)所以我希望我不会把这篇文章搞砸。
我是 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)
如果我使用 365.25(这是一年中的“真实”天数),它也不起作用。
谢谢!:)
我有一个包含通话记录的表:
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) 我正在尝试找到一种将工作日添加到任何日期的方法。一个例子是:
date = '2017-04-28' (It was a Friday)
date + 2 = '2017-05-02' (It skipped Saturday and Sunday)
Run Code Online (Sandbox Code Playgroud)
有没有办法在没有自定义查询的情况下做到这一点?
我需要帮助选择日期在前 3 个月内的数据。(注意:我不是要求过去 3 个月即DATEADD(MONTH, -3, GETDATE()))
我不想使用 DATEADD 方法的原因是这个查询可以在月中运行,我不希望它返回到那个点之前的数据
我有一个包含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)
请帮忙 :)
我有一个标题为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 日。
如果这是一个奇怪的数据类型问题,有什么想法吗?
我有一个存储过程,我想第一次在@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) 我们目前正在为我们的定制应用程序开发一个任务管理系统。经过深思熟虑,我们得出的结论是,我们只需要用户指定任务的截止日期。
我想知道当英国的用户添加任务并且圣彼得堡的用户看到它时它会如何工作,考虑到圣彼得堡比英国早至少 2 小时。
假设英国的用户创建了一个 20/Apr/2018 到期的任务。4 月 19 日 23:30(英国时间),圣彼得堡的一位用户打开了任务。但是,由于在圣彼得堡已经是 20/Apr,看起来任务已经完成,但实际上还没有安排运行。
如果日期字段实际上是 type date,我很确定圣彼得堡的用户会看到标记为过期的任务,因为他结束时已经是 20/Apr。
我见过其他几个任务工具,而且几乎所有工具都只允许任务的截止日期(而不是时间)。然而,我想知道其他系统如何处理此类问题,或者他们是否根本不打扰。
所以客观地回答我的问题:
datetime字段中捕获日期(即使我们不允许用户输入时间),然后还允许定义时区。我错过了什么吗?
编辑:为了回答有关我们是否希望任务的截止日期遵循查看任务的用户的时区或创建任务时的固定时区的问题,我们选择了固定时区。因此,任务将设置为英国时间 20/Apr 到期,只有在英国时间达到 YYYY-04-20 00:00:00.00 时才会到期。
为了支持这一点,我们将允许用户在创建任务时单击截止日期字段旁边的小图标,允许他们选择时区。时区将根据以下工作流程设置为默认值:
我们将为用户的帐户页面创建两个设置,允许用户:
a) 切换应用程序的选项以尝试从客户端自动获取其时区。
b) 让他们选择默认时区的选项。
基于这个要求,我们几乎可以得出结论,date数据类型是不可能的。现在对我来说不是 100% 清楚的是我们应该选择 a datetime2(我总是使用datetime2而不是datetime)还是 a datetimeoffset。
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'指标。
我想使用 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) date ×10
sql-server ×5
datetime ×3
t-sql ×3
mysql ×2
postgresql ×2
count ×1
datatypes ×1
date-format ×1
date-math ×1
firebird ×1
query ×1
select ×1
trigger ×1