Преобразовать / получить переменную varchar в YYYYMM - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть 4 CTE в этой таблице, а третий содержит DATETIME, преобразованный в VARCHAR (с форматом, основанным на требовании) как startDate в DD/MM/YYYY формате.Последний cte выполняет вычисления на основе сгенерированных данных, и один из столбцов должен хранить YYYYMM дату, основанную на startDate.

. Проблема заключается в получении года и месяца из этого преобразованного значения DATETIME с использованием функции преобразования() это показывает это:

IDPER
-------
01/01/ --DD/MM/

Эти 2 показывают YYYYMM правильно, когда startDate не преобразован:

Select *, left(convert(nvarchar(6),new_ini,112),6) as IDPER from table

Select *, convert(nvarchar(6),new_ini,112) as IDPER from table

Как я могу получить YYYYMM формат, имеющий startDateконвертируется?Или какой может быть более разумный подход к требованию

Ответы [ 3 ]

0 голосов
/ 05 февраля 2019

объявить @date DATE = GETDATE();

select REPLACE(LEFT(CONVERT(DATE,@date,112),8),'-','')  -- 1st approach

select FORMAT(@date,'yyyyMM') --2nd approach
0 голосов
/ 05 февраля 2019

Мой способ был бы немного другим

SELECT CONVERT(NVARCHAR(6), CONVERT(DATE, new_ini, 103), 112);

Здесь я сначала преобразовал его в дату, а затем отформатировал в ГГГГММДД и взял только 6 символов

0 голосов
/ 05 февраля 2019

Если у вас есть строка в формате ДД / ММ / ГГГГ и вы хотите ГГГГММ, используйте строковые операции:

select right(new_ini, 4) + substring(new_ini, 4, 2)

Вы должны хранить значения даты как date s или связанный типне как строка.Но, учитывая, что вы уже сохранили это как строку, строковые операции могут делать то, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...