英文:
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;
- 示例 db<>fiddle(以及如何到达此处)。
英文:
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;
- Example db<>fiddle (and how I got there).
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论