我知道 DATEDIFF(d, date1, date2),但我不想减去两个日期,而是减去一个日期的天数。
例如:
“2010-04-13” - 4 =“2010-04-09”
mySQL 可以吗?
我最近被告知BETWEEN在SQL中使用该方法有点不可靠,因此我应该使用它DATEDIFF().但是,另一位程序员告诉我情况并非如此,BETWEEN只要日期格式正确,该方法在所有情况下都能很好地运行.
请有人通过陈述哪种方法更好以及为什么解决这个问题?
目前我的日期范围SQL如下所示:
DATEDIFF(d,'01-Jan-1970',SIH.[Something_Date]) >= 0 AND DATEDIFF(d,'01-Jan-2013',SIH.[Something_Date]) <= 0
Run Code Online (Sandbox Code Playgroud)
但是,如果我能确定它是可靠的,我宁愿这样写它:
SIH.[Something_Date] BETWEEN '01-Jan-1970' AND '01-Jan-2013'
Run Code Online (Sandbox Code Playgroud)
在这种特殊情况下,我使用的是MsSQL,但是,我已经标记了MySQL,因为我想知道这是否也适用于此
我将如何获取毫秒数和特定数据。例如,我知道如何创建日期:
var d = new Date(2014,02,22,12,0,0,0);
Run Code Online (Sandbox Code Playgroud)
并获取今天的日期:
(new Date()).getTime() + 10*24*60*60*1000;
Run Code Online (Sandbox Code Playgroud)
但现在我该如何获取该日期发生之前的总毫秒数呢?
我有两个DateTime对象
$lastDate = $entity->getDate(); // is a DateTime with same format as $today
$today = \DateTime::createFromFormat('!Y-m-d', date('Y-m-d'));
Run Code Online (Sandbox Code Playgroud)
现在我想检查一下,如果这两个日期是同一天,或者它们是否相隔超过一天(但这也应该包括$lastDay昨天晚上11点和$today新的一天凌晨1点).
到目前为止我所拥有的是什么
$diff = $today->diff($lastDate);
if($diff->days > 0) {
$return = false;
} else {
$return = true;
}
Run Code Online (Sandbox Code Playgroud)
问题是:这似乎可以计算出日期是否超过彼此超过24小时,并且只有true在这种情况下才会设置.
我可以考虑通过比较来比较它们$date->format('d');,但这意味着我也会检查年份和月份.我知道这样可以完美地工作,但这将是一个五行或左右.
所以我的问题是:有没有更有效的方法来检查这个?这样的任何操作diff()都会给我一个单行的结果?
我有这样的数据:
Incident.ID.. = c(rep("INCFI0000029582",4), rep("INCFI0000029587",4))
date = c("2014-09-25 08:39:45", "2014-09-25 08:39:48", "2014-09-25 08:40:44", "2014-10-10 23:04:00", "2014-09-25 08:33:32", "2014-09-25 08:34:41", "2014-09-25 08:35:24", "2014-10-10 23:04:00")
df = data.frame(Incident.ID..,date, stringsAsFactors = FALSE)
df
Incident.ID.. date
1 INCFI0000029582 2014-09-25 08:39:45
2 INCFI0000029582 2014-09-25 08:39:48
3 INCFI0000029582 2014-09-25 08:40:44
4 INCFI0000029582 2014-10-10 23:04:00
5 INCFI0000029587 2014-09-25 08:33:32
6 INCFI0000029587 2014-09-25 08:34:41
7 INCFI0000029587 2014-09-25 08:35:24
8 INCFI0000029587 2014-10-10 23:04:00
Run Code Online (Sandbox Code Playgroud)
我用这个函数来计算时间差(以秒为单位):
padded.diff = function(x) c(0L, diff(x))
df2=within(df, {
date = strptime(date, format="%Y-%m-%d %H:%M:%S")
date.diff = padded.diff(as.numeric(date)) …Run Code Online (Sandbox Code Playgroud) 使用Hive时,可以返回select datediff('date1','date2') from table返回两个日期之间天数的值的功能.如果我对这两个日期之间的月份感兴趣怎么办?
一种选择是将结果除以30.5,因为平均月数大约为30.5天,但是当考虑大的日期范围时,这肯定会产生不准确.
您是否知道以标准SQL(理想情况下为HIVE)语法以类似方式检索月数(而不是天数)的方法?
我的表结构是这样的
id date Time userid
17 2017-01-22 05:08:09.0000000 836232017
16 2017-01-22 05:08:05.0000000 836232017
11 2017-01-22 05:06:40.0000000 836232017
10 2017-01-22 05:06:38.0000000 836232017
7 2017-01-22 05:06:31.0000000 836232017
Run Code Online (Sandbox Code Playgroud)
我需要获取相应用户 ID 和日期的第一个值和最后一个值之间的时间差。例如:用户 ID 836232017 的 datediff 介于 '05:08:09.0000000' 和 '05:06:31.0000000' 之间。请为此提供解决方案。
有一个包含事件和特定时间戳的表。我很难计算使用 Pyspark 2.0 API 过去的天数。当时间戳遵循另一种格式(yyyy-mm-dd)时,我设法做同样的事情
+-------------------+------------------------+----------+--------------+
| first_booking_date|first_booking_date_clean| today |customer_since|
+-------------------+------------------------+----------+--------------+
|02-06-2011 20:52:04| 02-06-2011|02-06-2011| null|
|03-06-2004 18:15:10| 03-06-2004|02-06-2011| null|
Run Code Online (Sandbox Code Playgroud)
我尝试了以下操作(没有任何效果):-使用字符串操作提取日期并使用 datediff-转换为时间戳,然后提取 dd:MM:yy(->result null)-我更喜欢使用 pyspark 命令而不是使用 sql 进行任何其他转换
非常感谢帮助,最好,非常感谢!!!
编辑:这是一个不起作用的例子:
import datetime
today = datetime.date(2011,2,1)
today = "02-06-2011"
first_bookings = first_bookings.withColumn("today",F.lit(today))
first_bookings = first_bookings.withColumn("first_booking_date_clean",F.substring(first_bookings.first_booking_date, 0, 10))
first_bookings = first_bookings.withColumn("customer_since",F.datediff(first_bookings.today,first_bookings.first_booking_date_clean))
Run Code Online (Sandbox Code Playgroud) I'm trying to translate the following SQL in to an EF Core query and I'm getting warnings that GroupBy and Sum will be evaluated locally. Is there anyway currently to write this that it will fully translate to SQL?
SELECT UserId, ST.StatusId, SUM(DATEDIFF(MINUTE, StartDate, ISNULL(EndDate,GETDATE()))) AS Time
FROM StatusTransaction ST
WHERE
TeamManagerId = 1
AND StartDate >= N'01-01-2019'
AND ISNULL(EndDate,GETDATE()) <= N'01-02-2019'
GROUP BY UserId, ST.StatusId
ORDER BY UserId
Run Code Online (Sandbox Code Playgroud)
And these are the EF queries I've used:
var efFunction = …Run Code Online (Sandbox Code Playgroud) 我已经尝试过 ( this_post ) 中的代码,但无法获得以秒为单位的日期差异。我只是在下面的 'Attributes_Timestamp_fix' 和 'lagged_date' 列之间使用 datediff()。任何提示?在我的代码和输出下方。
eg = eg.withColumn("lagged_date", lag(eg.Attributes_Timestamp_fix, 1)
.over(Window.partitionBy("id")
.orderBy("Attributes_Timestamp_fix")))
eg = eg.withColumn("time_diff",
datediff(eg.Attributes_Timestamp_fix, eg.lagged_date))
id Attributes_Timestamp_fix time_diff
0 3.531611e+14 2018-04-01 00:01:02 NaN
1 3.531611e+14 2018-04-01 00:01:02 0.0
2 3.531611e+14 2018-04-01 00:03:13 0.0
3 3.531611e+14 2018-04-01 00:03:13 0.0
4 3.531611e+14 2018-04-01 00:03:13 0.0
5 3.531611e+14 2018-04-01 00:03:13 0.0
Run Code Online (Sandbox Code Playgroud) datediff ×10
sql ×3
date ×2
mysql ×2
pyspark ×2
sql-server ×2
apache-spark ×1
datetime ×1
ef-core-2.2 ×1
group-by ×1
hadoop ×1
hive ×1
javascript ×1
linq ×1
php ×1
python ×1
r ×1
timestamp ×1