Объединить 2 строковых столбца, такие как год и месяц, в столбец формата даты - PullRequest
0 голосов
/ 30 января 2020

Я обновил ожидаемый формат даты. Поскольку столбец дней отсутствует, будет добавлен доступный последний день для каждого месяца. например, в июле 31 день, затем к июлю добавляется 31 день, например 2012-07-31; В июне 30 дней, это будет 2012-06-30.

У меня есть набор данных в SQL Сервер. Год и месяц - это две отдельные колонки. Обе они являются строками.

Year  Month
2012    7
2010    6
2009    1
2009    3
2018    10

Как объединить их вместе в новый столбец формата даты, например:

Year  Month   Date
2012    7    2012-07-31 00:00:000
2010    6    2010-06-30 00:00:000
2009    1    2009-01-31 00:00:000
2009    3    2009-03-31 00:00:000
2018    10   2018-10-31 00:00:000

Я пробовал несколько способов, но постоянно получаю сообщение об ошибке:

Ошибка преобразования при преобразовании даты и / или времени из строки символов.

Ответы [ 2 ]

2 голосов
/ 30 января 2020

Если вы хотите сгенерировать новую строку , которая объединяет числа c лет и месяцев, вы используете строковые функции:

concat(year, '-', case when len(month) = 1 then '0' end, month)

Выражение case слева месяц с 0, когда он имеет только одну ди git.


Теперь вопрос был отредактирован, и кажется, что вы хотите последний день месяца. Если это так, вы можете использовать datefromparts(), чтобы сгенерировать дату, которая представляет первый день месяца, и eomonth(), чтобы получить последний день этого месяца:

eomonth(datefromparts(year, month, 1))

И если вы действительно хотите datetime вместо даты:

cast(eomonth(datefromparts(year, month, 1)) as datetime)

Демонстрация на DB Fiddle :

year | month | endofmonth             
---: | ----: | :----------------------
2012 |     7 | 2012-07-31 00:00:00.000
2010 |     6 | 2010-06-30 00:00:00.000
2009 |     1 | 2009-01-31 00:00:00.000
2009 |     3 | 2009-03-31 00:00:00.000
2018 |    10 | 2018-10-31 00:00:00.000
1 голос
/ 30 января 2020

Вы можете построить дату, используя datefromparts():

select datefromparts(year, month, 1)

Затем вам нужно будет отформатировать дату в строку, чтобы получить ее в формате гггг-мм.

Если вы Чтобы получить столбец с этим форматом, используйте одно из следующих значений:

select concat(year, '-', right('0' + month, 2))

или: выберите год * 100 + месяц

в зависимости от того, являются ли базовые столбцы строками или числами.

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