从`dd-MM-yyyy`值获取`31-12-yyyy`格式的输出日期

时间:2017-06-12 10:59:16

标签: sql-server

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将从指定日期的年份开始检索。

3 个答案:

答案 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'

希望它有所帮助。