SQL Server:返回去年的最后一天

时间:2018-01-18 09:31:06

标签: sql-server tsql

看一下这段代码。

DECLARE @SQL VARCHAR(MAX), @DateWithDotsVARCHAR(10)

SELECT @DateWithDots = REPLACE(@Date, '-', '.')

IF OBJECT_ID('tempdb..##WL_Klijenti') IS NOT NULL 
    DROP TABLE ##WL_Klijenti

SELECT @SQL = '
    SELECT * 
     INTO ##WL_Klijenti
      FROM  OPENROWSET (''SQLOLEDB'',''Server=
     (local);TRUSTED_CONNECTION=YES;'',''SET FMTONLY OFF; SET NOCOUNT ON; 
    EXEC 
   '+DB_NAME()+'.dbo.sp_kbbl_WachLista_Priprema ''''' + @DateWithDots+ 
 ''''', ''''' + @DateWithDots + ''''', 0'')
AS tbl'
... the rest is less important
  

Second dateWithDots不需要作为用户输入,但在这里我将不得不通过   去年的最后一天而不是,在引用第一个@dateWithDots用户时会输入。   (这是由于一些资产负债表计算,一切正常,我只需设置此调整。)

所以不知怎的,我必须事先确定当前年份,YEAR可以从第一个@DateWithDots获取,因为这是请求的用户输入参数。

如何实现?

解决方案:

@ Cool_Br33ze的方法......

DECLARE @dateWithDots NVARCHAR(10)
SET @dateWithDots = '2018.01.18' --<< User Inputted date
SELECT LastDayLastYear = CAST(DATEADD(YEAR, 
            DATEDIFF(YEAR, -1, CAST(@dateWithDots AS DATE) )-1, -1) AS DATE)

我的方法......

DECLARE @LastDay VARCHAR(MAX)
SET @LastDay = CONVERT(VARCHAR(4),SUBSTRING(@Datum,1,4)-1) + '.12' + '.31';

1 个答案:

答案 0 :(得分:1)

使用正确的日期数据类型

gold

返回

  

2017年12月31日

DECLARE @dateWithDots DATE SET @dateWithDots = GETDATE() --<< User Inputted date SELECT LastDayLastYear = CAST(DATEADD(YEAR, DATEDIFF(YEAR, -1, @dateWithDots )-1, -1) AS DATE) 用于日期

NVARCHAR

返回

  

2017年12月31日

- 使用动态SQL - NVARCHAR优先于VARCHAR

DECLARE @dateWithDots NVARCHAR(10)
SET @dateWithDots = '2018.01.18' --<< User Inputted date
SELECT LastDayLastYear = CAST(DATEADD(YEAR, 
                DATEDIFF(YEAR, -1, CAST(@dateWithDots AS DATE) )-1, -1) AS DATE)