SQL Int to Date 然后提前 1 年?

标签 sql t-sql

我有一个 int 列,它存储日期如下:

201101
201102
201103

我需要获取这些 int 并将它们转换为如下所示:

01/2011
02/2011
03/2011

但是在同一列中,我需要在该日期添加一年,因此我希望以下列与现有的列相对应

201101 = 01/2011 - 12/2011
201102 = 02/2011 - 01/2012
201103 = 03/2011 - 02/2012

到目前为止,我做了以下操作,将其变成了日期字符串:

RIGHT(RTRIM([x].[Work_Month]),2) + '/' + LEFT([x].[Work_Month],4) AS PeriodDisplay

我只是不知道如何添加一年?

谢谢

最佳答案

DATEADD(yyyy,1,convert(date,RIGHT(RTRIM([x].[Work_Month]),2) + '/01/' + LEFT([x].[Work_Month],4) ))

我所做的更改:

  • 添加到/01/原来的位置 - 以便将其设置为该月的第一天,否则无法将其解析为日期
  • 将其包含在 convert(date) 函数中,以将其转换为日期类型。 msdn
  • 将其放在 dateadd 函数中以添加一年。 msdn

如果您确实希望该列包含两个日期(因此该字符串实际上是 03/2011 - 02/2012),那么只需从第一个日期中删除 dateadd 即可。如果您不想要这些天,那么您可以使用子字符串将它们删除。但这确实是一个前端问题:SQL Server 并不是执行此操作的理想工具。

关于SQL Int to Date 然后提前 1 年?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5328526/

相关文章:

c# - 单元测试表以确定有多个记录

sql - 使用 SQL Server 对多个键值对进行匹配/分组

sql - 持久化 H2 数据库内存模式事务的任何想法?

mysql - 使用 SELECT * 创建 MYSQL View

sql - 从服务器日志表查找停机持续时间

sql-server - 存储过程修改时间

sql - 带有 STUFF 函数的 WHERE 子句

sql-server - 在 SQL 中处理不明确的 varchar(是否唯一标识符)时转换失败

sql-server - 避免在存储过程中重复函数?

sql - 如何跟踪引用表的历史变化?