标签: datediff

在T-SQL中使用DATEDIFF

我在SQL语句中使用DATEDIFF.我正在选择它,我也需要在WHERE子句中使用它.这句话不起作用......

SELECT DATEDIFF(ss, BegTime, EndTime) AS InitialSave
FROM MyTable
WHERE InitialSave <= 10
Run Code Online (Sandbox Code Playgroud)

它给出了消息:无效的列名"InitialSave"

但这句话很好......

SELECT DATEDIFF(ss, BegTime, EndTime) AS InitialSave
FROM MyTable
WHERE DATEDIFF(ss, BegTime, EndTime) <= 10
Run Code Online (Sandbox Code Playgroud)

我的程序员说这是低效的(似乎我在调用函数两次).

所以有两个问题.为什么第一个陈述不起作用?使用第二个语句来执行它是否效率低下?

t-sql datediff

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

SQL DATEDIFF不工作?

我正在运行一个简单的DATEDIFF查询但它似乎没有正确计算日期或我做错了什么.

如果我跑

PRINT DATEDIFF(Day, 2010-01-20, 2010-01-01)
RETURN 19
Run Code Online (Sandbox Code Playgroud)

哪个是对的.如果我把第一个月的月份更改为2月(02),我会发现一些奇怪的事情.

PRINT DATEDIFF(Day, 2010-02-20, 2010-01-01)
RETURN 20
Run Code Online (Sandbox Code Playgroud)

现在不应该是48或什么?

任何人都可以看到我做错了,或者这不是正确的功能,如果我想要这些日期之间的天数?

我试过从另一个开始约会:

PRINT (2010-02-20) - (2010-01-01)
RETURN -20
Run Code Online (Sandbox Code Playgroud)

任何帮助非常感谢.

谢谢J.

sql t-sql datediff

6
推荐指数
1
解决办法
8535
查看次数

DATEDIFF 如何计算 SQL Server 2005 中的周差?

我想计算两个日期之间的差,如果两个日期的前一个星期日相同,则两个日期被视为同一周的一部分。理想情况下,我想使用DATEDIFF,而不是学习精心设计的习语来计算值。但是当涉及数周时,我不知道它是如何工作的。

以下查询返回 1 和 2。如果您的日历周以星期日开始,即如果您SET DATEFIRST 7预先运行或@@DATEFIRST默认情况下为 7,这可能是有意义的。

SET DATEFIRST 7;
-- SET DATEFIRST 1;

DECLARE
    @d1 DATETIME,
    @d2a DATETIME,
    @d2b DATETIME
;
SELECT
    @d1 = '2010-04-05',   -- Monday
    @d2a = '2010-04-16',  -- Following Friday
    @d2b = '2010-04-18'   -- the Sunday following
;

SELECT
    DATEDIFF(week, @d1, @d2a) AS weekdiff_a   -- returns 1
    ,DATEDIFF(week, @d1, @d2b) AS weekdiff_b  -- returns 2
;
Run Code Online (Sandbox Code Playgroud)

因此,如果SET DATEFIRST 1执行而不是SET DATEFIRST 7. 但不管怎样,返回值都是一样的!

这里发生了什么?我应该怎么做才能获得正确的周差?

sql-server idioms datediff

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

python:两个时间日期字符串的差异

我有两个日期字符串(取自用户输入,可能会有很大差异)

s1 = '2011:10:01:10:30:00'
s2 = '2011:10:01:11:15:00'
Run Code Online (Sandbox Code Playgroud)

我希望找到两者之间的差异作为分钟。

我应该如何着手解决这个问题?

python datetime datediff

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

MySQL日期差异迭代查询 - 简化查询或优化数据结构

通过介绍...
我遇到了这个问题:2个相邻字段之间的差异 - 日期 - PHP MYSQL并且正在尝试实现目标,即迭代日期并获得差异,使用纯MySQL.
那里的另一个问题(在SQL中从另一行中减去一行数据)帮助我理解了如何使用MySQL进行类似的操作.它没有解决问题,因为解决方案仍然对固定值或假设的数据顺序不满意,但它确实帮助我理解了方法.
还有一个问题(如何在MySQL中获取下一个/上一个记录?),其中的答案描述了如何从下一行/上一行获取值.它仍然依赖于某些固定值,但我学会了如何使用该技术.

说我有这张桌子foo:

CREATE TABLE `foo` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `dateof` date NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)
  id | dateof
-----+------------
   1 | 2012-01-01
   2 | 2012-01-02
  11 | 2012-01-04
  12 | 2012-01-01
  13 | 2012-01-02
  14 | 2012-01-09
 111 | 2012-01-01
 112 | 2012-01-01
 113 | 2012-01-01
Run Code Online (Sandbox Code Playgroud)

有两个假设:

  1. 主键(id)按升序排列,允许"漏洞".
  2. dateof列中的每个日期都有效,其含义为:无NULLs且无默认值(0000-00-00).我想迭代每一行并计算上一次输入的天数,以便接收:
  id …
Run Code Online (Sandbox Code Playgroud)

mysql iteration optimization datediff query-optimization

5
推荐指数
1
解决办法
1308
查看次数

Perl:如何漂亮地打印时间差(持续时间)

我如何在 Perl 中漂亮地打印持续时间?

到目前为止我唯一能想到的是

my $interval = 1351521657387 - 1351515910623; # milliseconds
my $duration = DateTime::Duration->new(
    seconds => POSIX::floor($interval/1000) ,
    nanoseconds  => 1000000 * ($interval % 1000),
);
my $df = DateTime::Format::Duration->new(
    pattern => '%Y years, %m months, %e days, ' .
               '%H hours, %M minutes, %S seconds, %N nanoseconds',
    normalize => 1,
);
print $df->format_duration($duration);
Run Code Online (Sandbox Code Playgroud)

这导致

0 years, 00 months, 0 days, 01 hours, 35 minutes, 46 seconds, 764000000 nanoseconds
Run Code Online (Sandbox Code Playgroud)

这对我来说没有好处,原因如下:

  1. 我不想看到“ 0 年”(空间浪费)&c,并且我不想从其中删除“ %Y 年pattern” …

perl datetime duration datediff

5
推荐指数
1
解决办法
3240
查看次数

触发RAISERROR和ELSE案例问题

我正在尝试编写一些代码,这些代码需要两个单独的列(一个月和一年)。从那里,我希望它查看输入的数字是否已经通过。如果它们已通过,则导致错误通过并停止事务。否则,我希望它继续并将新信息插入表中。我知道我即将使它起作用,但是我似乎无法启动RAISERROR。我确信这与我还很陌生,我遗漏了一些小细节。

目前,我将这两个月用作变量,并制作了第三个变量以将其他两个变量转换为正确的日期时间格式。然后,我使用datediff函数尝试查看它是否已通过这种方式。无济于事。即使卡片日期较旧,我仍会继续执行插入功能。

USE AdventureWorks2012
GO

CREATE TRIGGER BadCreditCardDate
ON Sales.CreditCard
INSTEAD OF INSERT
AS
Begin
DECLARE @ExpMonth tinyint,
        @ExpYear smallint,
        @ExpMonthYear datetime

SELECT  @ExpMonth=ExpMonth, 
        @ExpYear=ExpYear,
        @ExpMonthYear = @ExpYear + '-' + @ExpMonth + '-00' 
FROM INSERTED
    IF
    DATEDIFF(MONTH,@ExpMonthYear,GETDATE()) < 0
    BEGIN
        RAISERROR ('The Credit Card you have entered has expired.' ,10,1)
        ROLLBACK TRANSACTION
    END 

ELSE    
Begin
    INSERT INTO CreditCard (CardType, CardNumber, ExpMonth, ExpYear, ModifiedDate)
    Select CardType, CardNumber, ExpMonth, ExpYear, ModifiedDate FROM inserted
END
End
Run Code Online (Sandbox Code Playgroud)

sql-server triggers datediff raiserror

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

如何计算ElasticSearch中两个日期时间之间的差异

我正在使用ES,我需要一个返回两个日期时间(mysql timediff)之间差异的查询,但是没有找到ES的任何功能来执行此操作.有人可以帮帮我吗?

MySQL查询

SELECT SEC_TO_TIME(
    AVG(
      TIME_TO_SEC(
        TIMEDIFF(r.acctstoptime,r.acctstarttime)
      )
    )
) as average_access

FROM radacct
Run Code Online (Sandbox Code Playgroud)

谢谢!

datediff elasticsearch

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

DATE_DIFF,但仅计算工作日

我有一个相当简单的查询;它看起来像这样:

SELECT
order_date,
pickup_date,
DATE_DIFF(pickup_date,order_date, day) order_to_pickup
FROM
`orders.table`
Run Code Online (Sandbox Code Playgroud)

唯一的问题是,我需要计算工作日的日期差异,而不是所有日期。

因此,上面的查询返回的不是:

+------------+-------------+-----------------+
| order_date | pickup_date | order_to_pickup |
+------------+-------------+-----------------+
| 3/29/19    | 4/3/19      |               5 |
| 3/29/19    | 4/2/19      |               4 |
+------------+-------------+-----------------+
Run Code Online (Sandbox Code Playgroud)

我希望它返回:

+------------+-------------+-----------------+
| order_date | pickup_date | order_to_pickup |
+------------+-------------+-----------------+
| 3/29/19    | 4/3/19      |               2 |
| 3/29/19    | 4/2/19      |               3 |
+------------+-------------+-----------------+
Run Code Online (Sandbox Code Playgroud)

sql datediff google-bigquery

5
推荐指数
1
解决办法
9301
查看次数

Difference in days between two dates in R using dplyr and lubridate?

Looking to do the SQL equivalent of datediff in R?

基本上,我想在 R 中进行这个计算

Delivery Date  Expected Date   Difference 
2022-01-05     2022-01-07         -2 
        
Run Code Online (Sandbox Code Playgroud)

datediff r lubridate dplyr tidyverse

5
推荐指数
1
解决办法
5560
查看次数