存储时失去价值的日期

Date losing value when being stored

我正在尝试将一组日期转换为特定格式 (ddmmyy),以便它们可以 运行 与我拥有的许多脚本相对应。

我已经设法将日期转换为正确的格式,但是当我尝试将其存储为变量时,它只是 returns 为 null 或未格式化的日期。

DECLARE @CurrentDate SMALLDATETIME

SELECT @CurrentDate = getdate()
SELECT @CurrentDate = DATEADD(day, -1, @CurrentDate)
SELECT @CurrentDate = STR_REPLACE(CONVERT(varchar,@CurrentDate,3),'/',null)

--Returns this:
20-Mar-2002 00:00:00
DECLARE @CurrentDate SMALLDATETIME

SELECT @CurrentDate = getdate()
SELECT @CurrentDate = DATEADD(day, -1, @CurrentDate)
SELECT STR_REPLACE(CONVERT(varchar,@CurrentDate,3),'/',null)

--Returns this:
020320

我认为问题出在我声明的变量是一个 smalldatetime 对象,但我不确定如何将其正确转换为可以作为变量存储的字符串?

我试过使用第二个变量并将其声明为 varchar,然后将我的日期存储为 varchar,但这也不起作用:

DECLARE @CurrentDate SMALLDATETIME
DECLARE @CurrentDateFinal VARCHAR

SELECT @CurrentDate = getdate()
SELECT @CurrentDate = DATEADD(day, -1, @CurrentDate)
SELECT @CurrentDateFinal = CAST(STR_REPLACE(@CurrentDate,'/',null) AS VARCHAR)

--Returns this:
03-Mar-2020 00:00:00

您可以在一行中使用 dateadd 进行当前日期修改 - 无需两行。下面为您提供了 DDMMYY 输出,尽管我个人不会使用该格式,因为您可能会因区域差异而感到困惑(例如,美国更喜欢 MMDDYY 而英国倾向于 DDMMYY)。也总是使用 4 位数的年份 IMO。

    DECLARE @FirstDate SMALLDATETIME
    DECLARE @FinalDate varchar(20)

    SELECT @FirstDate = DATEADD(day, -1,getdate())
    set @FinalDate = STR_REPLACE(CONVERT(varchar,@FirstDate,3),'/',null)
    SELECT @FinalDate

    --------------------
    030320
    (1 row affected)