如何按季度(将一年分为三部分)获取开始日期。

huangapple go评论53阅读模式
英文:

How to get the begin date by tri-annual period (the year is devided into 3 parts)

问题

我想要获取每年的三分之一部分的起始日期,当我提供一个日期时,返回必须是这个三分之一部分的第一天(日期)。

示例:如果参数是'2023年4月1日',返回必须是'2023年1月1日'。

如果参数是'2023年6月1日',返回必须是'2023年5月1日'。

依此类推。

英文:

I want to get the beginning date of each one third part of year, when I give a date the return must be the first day (date) of this one-third part.

Example: if the parameter is '1-april-2023' the return must be '1-jan-2023'

if the parameter is '1-june-2023' the return must be '1-may-2023'

and so on

答案1

得分: 1

我们可以通过将4个月乘以(month-1)/4添加到年初来进行一些日期数学计算。

CREATE FUNCTION dbo.GetThirdOfYear(@d date)
RETURNS TABLE WITH SCHEMABINDING
AS
  RETURN 
  (
    SELECT Third = DATEADD(MONTH, 
      4*((MONTH(@d)-1)/4), 
      DATEFROMPARTS(YEAR(@d),1,1))
  );

示例用法,假设有一个名为Events的表,其中有一个名为EventDate的列:

SELECT e.EventDate, f.Third
FROM dbo.Events AS e
CROSS APPLY dbo.GetThirdOfYear(e.EventDate) AS f;
英文:

We can do some date math by adding 4 months times the (month-1)/4 to the beginning of the year.

CREATE FUNCTION dbo.GetThirdOfYear(@d date)
RETURNS TABLE WITH SCHEMABINDING
AS
  RETURN 
  (
    SELECT Third = DATEADD(MONTH, 
      4*((MONTH(@d)-1)/4), 
      DATEFROMPARTS(YEAR(@d),1,1))
  );

Sample usage, given a table called Events with a column called EventDate:

SELECT e.EventDate, f.Third
FROM dbo.Events AS e
CROSS APPLY dbo.GetThirdOfYear(e.EventDate) AS f;

huangapple
  • 本文由 发表于 2023年2月8日 20:11:05
  • 转载请务必保留本文链接:https://go.coder-hub.com/75385609.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定