Дата теряет значение при сохранении - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь получить набор дат в определенном формате (ddmmyy), чтобы их можно было запускать на нескольких имеющихся у меня сценариях.

Мне удалось преобразовать дату в правильный формат, но когда я пытаюсь сохранить его как переменную, он просто возвращает нулевую или неформатированную дату.

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

1 Ответ

1 голос
/ 04 марта 2020

Вы можете изменить текущую дату, указав дату и все в одной строке - нет необходимости делать две строки. Ниже приведен вывод DDMMYY, хотя я бы не использовал этот формат лично, так как вы можете столкнуться с региональными различиями (например, США предпочитают MMDDYY, а в Великобритании, как правило, DDMMYY). Также всегда используйте 4 ди git года ИМО.

    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)
...