在 SQL 中为给定年份设置硬编码的日期和月份

Posted

技术标签:

【中文标题】在 SQL 中为给定年份设置硬编码的日期和月份【英文标题】:Set a hardcoded day and month for a given year in TSQL 【发布时间】:2017-03-28 18:28:06 【问题描述】:

我正在处理一个小查询,希望在格式化日期方面得到一些帮助

情况

我接受付款日期,并根据该日期将到期日期设置为今年或明年的 3 月 31 日。所以如果在1月份还款,到期日就是当年的3月31日,如果是8月份,就是下一年的3月31日。 这是我的查询。

BEGIN
IF DATEPART(MONTH,@paydate) BETWEEN 1 and 3 
UPDATE usrBio
SET ExpDate=DATEPART(YEAR,GETDATE())+'-31'+'-03'
WHERE IDnum =@IDnum
ELSE IF
DATEPART(MONTH,@paydate) BETWEEN 4 and 12
UPDATE usrBio
SET ExpDate=DATEPART(YEAR,GETDATE()+1)+'-31'+'-03'
WHERE IDnum =@IDnum
END

我遇到的问题是我不确定如何设置月份和日期,而不是连接到年份字符串,而是从年份日期中减去,我的结果是 1905-06-07 00:00:00.000 我期待 @ 987654323@.

【问题讨论】:

DATEPART 不是mysql 你的意思是SQL Server @JuanCarlosOropeza 更改了标签 【参考方案1】:

如果 2012 年以上,请考虑 DateFromParts()

示例 1

Declare @PayDate date = '2017-08-31'

Select DateFromParts(Year(@PayDate)+IIF(Month(@PayDate)>3,1,0),3,31)

退货

2018-03-31

----------

示例 2

Declare @PayDate date = '2017-03-31'

Select DateFromParts(Year(@PayDate)+IIF(Month(@PayDate)>3,1,0),3,31)

退货

2017-03-31

**

编辑 - 2008 年

**

Select DateAdd(YEAR,case when Month(@PayDate)>3 then 1 else 0 end,str(Year(@PayDate),4)+'-03-31')

【讨论】:

有帮助,你还在 2008 年 @Niana 查看编辑 - 2008 年【参考方案2】:

问题是您尝试将年份作为数字而不是字符串

DEMO

SELECT CAST( DATEPART(YEAR,GETDATE()+1) 
             AS varchar(5)) +'-03'+'-31'

你可以像这样优化你的逻辑

UPDATE usrBio
SET ExpDate = CAST( CASE WHEN DATEPART(MONTH,@paydate) BETWEEN 1 and 3 
                         THEN DATEPART(YEAR,GETDATE())
                         WHEN DATEPART(MONTH,@paydate) BETWEEN 4 and 12 
                         THEN DATEPART(YEAR,GETDATE()+1) 
                    END AS varchar(4)
                  ) +'-03'+'-31'

【讨论】:

我的 ExpDate 是一个日期字段,我相信分配 varchar 会出错?我是否将其转换回日期时间? 作为查询/存储过程,它执行并运行良好,但作为存储过程运行会产生该错误,我什至尝试将结果转换为日期时间 没有意义。你能告诉我代码吗?,你试过 Jhon 解决方案吗? 可能与服务器上的排序规则有关。通常最好使用任何排序规则都可以识别的日期形式,例如 YYYYMMDD @HLGEM 可能是对的尝试使用+'-03'+'-31' 我的演示和 Jhon 都使用该符号。

以上是关于在 SQL 中为给定年份设置硬编码的日期和月份的主要内容,如果未能解决你的问题,请参考以下文章

如何查找季度、年份、月份、学期开始和结束日期

Java - 在指定的给定月份 - 年份范围内打印每个月的第一个和最后一个日期

在 SQL Server 2008 中从月份和年份创建日期

如何在包含单词、三个字母月份和两位数字年份的字符串中搜索月份和年份并将它们转换为 SQL 中的日期?

SQL:给定年份和月份,我如何计算每周的订单数

SQL Server 2008 仅在月份和年份之间选择数据