Sql 更新月份和日期差异
我有一个如下所示的表格: 注:最大最后订单日期为20131015,格式为yyyymmdd 我想将最终结果显示如下: 我有200000多条记录,有什么问题可以帮助我吗Sql 更新月份和日期差异,sql,sql-server,sql-server-2008,sql-update,datediff,Sql,Sql Server,Sql Server 2008,Sql Update,Datediff,我有一个如下所示的表格: 注:最大最后订单日期为20131015,格式为yyyymmdd 我想将最终结果显示如下: 我有200000多条记录,有什么问题可以帮助我吗 非常感谢您花时间看我的问题。试试这样的方法: declare @a date set @a='20130105' declare @b date set @b='20131015' select datediff(d,@a,@b) as date_diff,datediff(m,@a,@b) as month_diff 功
非常感谢您花时间看我的问题。试试这样的方法:
declare @a date
set @a='20130105'
declare @b date
set @b='20131015'
select datediff(d,@a,@b) as date_diff,datediff(m,@a,@b) as month_diff
功能
试试这个:
UPDATE A
SET A.monthDiff = DATEDIFF(mm, CONVERT(DATE, A.orderDate, 112), B.lastOrderDate),
A.dayDiff = DATEDIFF(dd, CONVERT(DATE, A.orderDate, 112), B.lastOrderDate)
FROM tableA A, (SELECT MAX(CONVERT(DATE, orderDate, 112)) lastOrderDate FROM tableA) B
检查
输出
| ID | ORDERDATE | MONTHDIFF | DAYDIFF |
|----|-----------|-----------|---------|
| 1 | 20130105 | 9 | 283 |
| 2 | 20130205 | 8 | 252 |
| 3 | 20130305 | 7 | 224 |
| 4 | 20130909 | 1 | 36 |
| 5 | 20131001 | 0 | 14 |
| 6 | 20131015 | 0 | 0 |
试试这个。
选择DATEDIFF(DAYOFYEAR,'20131015','20131125')
。
DAYOFYEAR
表示天数计数。根据您的要求,您可以使用DATEDIFF
更改以查看月、日或年的差异。此选项是否立即更新整个列??你能告诉我我不熟悉sql的逻辑吗server@SaharshShah Hi,我使用这个查询,但是结果显示“从字符串转换日期和/或时间时转换失败”。你知道如何解决这个问题吗?thanks@user3094424检查我的更新答案,它会工作。我忘了您已经用这种格式存储了日期yyyymmdd
。我们必须更改日期列的格式,才能得到日期差。@Saharsh Shah我可以知道什么是“STR_to_date”吗?@user3094424检查更新的答案。STR_TO_DATE函数用于将字符串转换为日期,但这是MySQL函数。我忘了你想要在SQL Server中Hi,我有一千多条记录,你上面的查询只能帮助我一个接一个地做,我需要一个查询来一次完成所有事情并更新它们?你有什么好的建议吗?光标会帮你的。你有2列来查看差异,选择光标中的那2列并更新它。嗨,我有1000多条记录,你上面的查询只能帮助我逐个完成,我需要一个查询来一次性完成所有事情并更新它们?你有什么好的建议吗?