From_date 23-03-2014, 16-06-2015, 28-03-2016, 18-09-2011
To_date 31-12-2014, 31-12-2015, 31-12-2016, 31-12-2011
如果我提供任何日期dd-mm-yyyy
,在其他栏目中我应该31-12-yyyy
我的意思是预期的yyyy
将从指定日期的年份开始检索。
答案 0 :(得分:0)
你正在尝试这样的事情:
SELECT DATEADD(yy, DATEDIFF(yy, 0, cast('23-03-2014' as date)) + 1, -1) AS EndOfYear
输出:2014-12-31 00:00:00.000
所以试试:
SELECT DATEADD(yy, DATEDIFF(yy, 0, cast(From_date as date)) + 1, -1) AS EndOfYear
答案 1 :(得分:0)
您可以使用以下格式将dd-mm-yyyy
更改为预期的行为:
SELECT FORMAT(DATEFROMPARTS(YEAR(CONVERT(CHAR(10),CONVERT(DATETIME,LEFT(('28-03-2016'),10),105),101)), 12, 31), 'dd-MM-yyyy');
使用给定数据执行示例:
DECLARE @TestTable TABLE (TestDate VARCHAR (10));
INSERT INTO @TestTable (TestDate) VALUES
('23-03-2014'), ('16-06-2015'), ('28-03-2016'), ('18-09-2011')
SELECT TestDate,
FORMAT(DATEFROMPARTS(YEAR(CONVERT(CHAR(10),CONVERT(DATETIME,LEFT((TestDate),10),105),101)), 12, 31), 'dd-MM-yyyy') AS ResultDate
FROM @TestTable
答案 2 :(得分:0)
声明一个变量以保存From_Date
DECLARE @From_Date AS DATE = 2014-03-23
声明另一个变量仅保存From_Date的年份部分
DECLARE @Year_Part AS VARCHAR(4) = DATEPART(yyyy, @From_Date) AS YearOfSelectedYear
获取所选年份的最后一天
DECLARE @To_Date AS DATE = @Year_Part + '-12-31'
希望它有所帮助。