tsql - 如何在 MSSQL 中将 YYYY-MM-DD 格式化为 YYYY-WW
问题描述
我正在尝试在 T-SQL中格式化从YYYY-MM-DD
到(年-周)的日期字符串。YYYY-WW
我试过在网上浏览如何在没有运气的情况下做到这一点。我知道它可以在 MySQL 中使用 相当简单地完成DATE_FORMAT()
,但是我没有运气在 T-SQL 中找到相应的方法。
示例:2017-01-01
到2017-01
解决方案
如果源数据是字符串,首先需要将其转换为日期。如果是日期,则没有显示格式。
因此,让我们从更简单的情况开始,然后转到更复杂的情况:假设源数据的类型为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
.
推荐阅读
- javascript - 使用纯java脚本的购物车项目
- javascript - useRef 和普通变量的区别
- r - 如何更改ggplot中函数对应的实验室名称
- python - 如何在 Django 中将任务标记为已完成时获取日期时间?
- xamarin.forms - 为 CarouselViewControl 实现 SelectedItem
- mysql - sql中的正确连接没有按预期给出答案
- linux - 使用 bash、awk 或 sed 将 CSV 文件模板化为 SQL 文件
- excel-formula - vlookup 使用表格搜索数据并从数组中返回结果
- apache-nifi - 如何为自定义处理器生成使用文档
- excel - 我正在尝试使用 xlrd 检测 excel (.xlsx) 文件中单元格背景的颜色,但我似乎无法成功