繁体   English   中英

如何使用 SQL 服务器从日期中减去一个月

[英]How to subtract one month from a date using SQL Server

我有一个格式为dd/mm/yyyy的日期。 我想从中减去一个月。

我正在使用此代码,但 output 是“09/10/2020”我不知道为什么我的代码也减去年份 -2。

这是我的要求

SELECT
    FORMAT(CONVERT (DATE, DATEADD(MONTH, -1, CONVERT(char(9), GETDATE()))), 'dd/MM/yyyy')

您需要将其更改为:

select format(CONVERT (date,DATEADD(MONTH, -1,GETDATE())), 'dd/MM/yyyy' )

但正如 Larnu 所说。 看来您需要更改列。

您当前的代码无法按预期工作,因为:

SELECT CONVERT(char(9), GETDATE());

返回这个(至少用我的语言):

Nov  9 20

不幸的是,在我的语言中,这是一个有效日期(但在 {20}20,而不是 {20}22)。

即使采用正确的样式 (103), char(9)明天也会产生10/11/202 ,因为只有当日或月是一位数字时,9 位数字才足够。

不知道为什么要将GETDATE()转换为字符串。 只需对其执行日期数学运算,然后根据需要对其进行格式化(使用特定的样式编号,例如 d/m/y 为 103):

SELECT CONVERT(char(10), DATEADD(MONTH, -1, GETDATE()), 103);

我真的不会为这样简单的 output 使用FORMAT() ,因为 CLR 开销真的不值得。 理想情况下,您将其保留为日期/时间类型直到演示时间 - 如果这确实是一个明智的想法,那么您的演示层肯定可以将您的日期显示为 d/m/y。

如果您将日期存储或传递为字符串(更糟糕的是,以 d/m/y 等区域格式),您真的应该考虑修复它。

首先,

您应该将 Date 存储为字符串以便于操作。 如果您不想更改列,您始终可以从 Date 转换为 Varchar,然后(重新)转换它。

示例:首先,使用样式代码“112”ISO 将 Date 转换为 varchar,以格式化为 yyyyMMdd:

DECLARE @date DATE = GETDATE();

DECLARE @dateConverted as VARCHAR (8) = (SELECT CONVERT(VARCHAR, @date, 112));

然后您只需使用 DATEADD() 减去月份:

DECLARE @previousMonth AS VARCHAR (8) = (SELECT FORMAT(DATEADD(month, -1, @dateConverted), 'yyyyMMdd'));

最后,再次将 varchar 转换为 Date:

DECLARE @previousMonthConverted AS DATE = (SELECT CONVERT(CHAR(10), CONVERT(date, @previousMonth), 120));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM