首页 > 解决方案 > 如何在 MSSQL 中将 YYYY-MM-DD 格式化为 YYYY-WW

问题描述

我正在尝试在 T-SQL中格式化从YYYY-MM-DD到(年-周)的日期字符串。YYYY-WW我试过在网上浏览如何在没有运气的情况下做到这一点。我知道它可以在 MySQL 中使用 相当简单地完成DATE_FORMAT(),但是我没有运气在 T-SQL 中找到相应的方法。

示例:2017-01-012017-01

标签: tsqlformat

解决方案


如果源数据是字符串,首先需要将其转换为日期。如果是日期,则没有显示格式。

因此,让我们从更简单的情况开始,然后转到更复杂的情况:假设源数据的类型为Date( DateTime,DateTime2并且DateTimeOffset也可以正常工作) - 您可以使用concat,datepart和的组合right

DECLARE @source Date = '2017-01-01';

SELECT  CONCAT(DATEPART(YEAR, @source), '-', RIGHT(CONCAT('00', DATEPART(WEEK, @source)), 2)) As TargetDate;

您用于RIGHT(CONCAT('00', <SomeIntValue>), 2)确保两位数的结果。

稍微复杂一点的情况是源数据是字符串时。
在这种情况下,使用这种特定格式,我将用于left获取年份部分,cast(@DateString as date)并将字符串转换为日期。对于任何其他格式(除了yyyymmdd),您应该使用convert适当的样式将字符串转换为日期。(为什么?

DECLARE @DateString char(10) = '2017-01-01';

SELECT CONCAT(LEFT(@DateString, 4), '-', RIGHT(CONCAT('00', DATEPART(WEEK, CAST(@DateString as date))), 2)) As TargetDate;

两者都将导致2017-01.

最后一件事 - 为了解决我们在评论中的对话 - 如果您想从第一个星期一开始计算一年中的第一周,您需要将WEEK日期部分标识符更改为ISO_WEEK.


推荐阅读