看一下这段代码。
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';
答案 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)