【发布时间】:2019-05-01 03:16:21
【问题描述】:
我想找出DD-MM-YYYY 格式的两个日期之间的差异。例如,我有 2 个日期 29-10-2018 和 29-11-2018。我想在 SQL Server 中找到这两个日期(30 天)之间的天数差异。
【问题讨论】:
-
当您说 DD-MM-YYYY 格式的日期时,您的意思是它们被存储为“字符串”类型(例如 Varchar?)
标签: sql-server
我想找出DD-MM-YYYY 格式的两个日期之间的差异。例如,我有 2 个日期 29-10-2018 和 29-11-2018。我想在 SQL Server 中找到这两个日期(30 天)之间的天数差异。
【问题讨论】:
标签: sql-server
您可以更改当前会话的date format,然后使用DateDiff函数。
SET DATEFORMAT 'dmy'
SELECT DATEDIFF(DAY, '29-10-2018', '29-11-2018')
在将其添加到生产代码之前,我会检查更多关于 Set DateFormat 的信息。
这会更改 SESSION 日期格式,而不是 DATABASE。
[来自Previous Post的注释:这通常不是解决日期解释问题的方法。如果可以避免,不应将日期时间存储为字符串(改用日期时间或日期列)。如果您必须以字符串形式存储,请使用 ISO 8601 格式,该格式基本上为 YYYYMMDD]
【讨论】:
使用 DATEDIFF
SELECT DATEDIFF(day, '2018-10-29 00:00:00.000', '2010-11-29 00:00:00.000')
【讨论】:
声明@date1 varchar(10),@date2 varchar(10)
设置@date1 = '01-11-2018'
设置@date2 = '28-11-2018'
选择
datefromparts(
right(left(@date2 ,10),4),
substring(left(@date2 ,10),4,2),
left(left(@date2 ,10),2)
)
选择 日期差异 ( 天,
datefromparts( right(left(@date1 ,10),4),
substring(left(@date1 ,10),4,2),
left(left(@date1 ,10),2)
),
datefromparts( right(left(@date2 ,10),4),
substring(left(@date2 ,10),4,2),
left(left(@date2 ,10),2)
)
)
【讨论】: