TSQL 将日期差格式化为“YY 年 MM 月和 DD 天”

发布于 2024-09-07 03:32:23 字数 249 浏览 7 评论 0原文

好吧,这是一个有点奇怪的请求。我们试图在 PeopleSoft 的报告中得到格式化的“年龄”语句,它提供了一个基于“TSQL”的构建器,这是相当无用的。我们不能使用存储函数,也不能将整个 SQL 语句作为一件事进行编辑。我们所能做的就是逐个字段说出公式是什么,然后该工具会将其所有元素连接在一起以生成查询。

因此,考虑到这一限制,我们如何才能将两个日期之间的差异格式化为人类可读的句子 例如。 “14 年 3 个月零 10 天”

任何想法将不胜感激。

Ok this is a little bit of a strange request. We are trying to get a formatted "age" statement to come out in a report in PeopleSoft, it provides a "TSQL" based builder which is fairly unhelpful. We cannot use stored functions and we cannot edit the entire SQL statement as one thing. All we can do is say field by field what the formula is, then the tool will join it all the elements together to produce the query.

So, given that restriction how can we get the difference between two dates to be formatted as a nicely human readable sentence
eg. "14 years, 3 months and 10 days"

Any ideas would be greatly appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

瞳孔里扚悲伤 2024-09-14 03:32:23

如果您可以使用字符串连接,这将为您提供年数:

DATEDIFF(yy, t.startdate, t.enddate) 

这将为您提供月份:

DATEDIFF(mm, 
         DATEADD(yy, 
                 DATEDIFF(yy,  
                          t.startdate, 
                          t.enddate), 
                 t.startdate), 
         t.enddate)

这将为您提供天值:

DATEDIFF(dd, 
         DATEADD(mm, 
                 DATEDIFF(mm, 
                          DATEADD(yy, 
                                  DATEDIFF(yy, 
                                           t.startdate, 
                                           t.enddate), 
                                  t.startdate), 
                          t.enddate), 
                          DATEADD(yy, 
                                  DATEDIFF(yy, 
                                           t.startdate, 
                                           t.enddate), 
                                  t.startdate)), 
         t.enddate)

您可以 参见 &使用此保存的查询进行测试我发布在StackExchange Data Explorer上。它使用 Azure,并使用 TSQL...

If you can use string concatenation, this will give you the number of years:

DATEDIFF(yy, t.startdate, t.enddate) 

This will give you the months:

DATEDIFF(mm, 
         DATEADD(yy, 
                 DATEDIFF(yy,  
                          t.startdate, 
                          t.enddate), 
                 t.startdate), 
         t.enddate)

And this will give you the days value:

DATEDIFF(dd, 
         DATEADD(mm, 
                 DATEDIFF(mm, 
                          DATEADD(yy, 
                                  DATEDIFF(yy, 
                                           t.startdate, 
                                           t.enddate), 
                                  t.startdate), 
                          t.enddate), 
                          DATEADD(yy, 
                                  DATEDIFF(yy, 
                                           t.startdate, 
                                           t.enddate), 
                                  t.startdate)), 
         t.enddate)

You can see & test using this saved query I posted on the StackExchange Data Explorer. It uses Azure, with uses TSQL...

此刻的回忆 2024-09-14 03:32:23

您可以使用任何您喜欢的公式。您只需将返回类型和 SQL 函数放入表达式选项卡中,然后将表达式用作字段即可。

You can use whatever formula you like. You simply put the return type, and the SQL function in the expression tab, then use the expression as a field.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文