Как преобразовать столбец даты в TSQL для отображения только месяца и года - PullRequest
1 голос
/ 26 июня 2019

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

У меня есть три столбца DateId, Customer и PayAmount, всеиз той же таблицы.Есть много клиентов, у которых есть несколько платежей каждый месяц, и я хотел бы сгруппировать каждый месяц, объединяя все платежи каждый месяц на клиента.

Select 
    Convert(Date, Convert(Char(8), DateId), 112) As [Date], 
    Sum(PayAmount), Customer 
from 
    Pay 
Group By 
    Customer, DateId

Что я получаю:

DateId         PayAmount     Customer
--------------------------------------
2019-06-20       $100           A
2019-06-24       $200           B
2019-04-22       $100           B
2019-03-20       $300           A
2019-04-22       $100           B
2019-06-21       $200           A
2019-06-21       $100           B

Что я хочу:

DateId         PayAmount     Customer
-------------------------------------
2019-06         $300           A
2019-06         $300           B
2019-04         $200           B
2019-03         $300           A

Ответы [ 2 ]

1 голос
/ 26 июня 2019

Другой вариант - использовать неявное преобразование.В этом случае LEFT(DateID,7).

Пример обновлен для INT

Select DateID      = stuff(left(DateID,6),5,0,'-')
      ,[PayAmount] = sum([PayAmount])
      ,Customer
 From  YourTable
 Group By left(DateID,6),Customer

Возвращает

DateID   PayAmount      Customer
2019-03  300            A
2019-06  300            A
2019-04  200            B
2019-06  300            B
0 голосов
/ 26 июня 2019

Похоже, вам нужны только первые 7 символов стиля ISO8601:

CONVERT(varchar(7),DateId,126)

Если вы хотите сохранить тип данных date, вам нужно округлить дату до начала месяца. Одним из распространенных способов сделать это является приведенный ниже метод получения разницы в месяцах между значением и датой «0» (1900-01-01):

CONVERT(date,DATEADD(MONTH,DATEDIFF(MONTH, 0, DateId),0))

Если вам необходимо отобразить формат yyyy-MM, вы можете установить его в качестве формата на уровне презентации.

Если вам нужно сгруппировать это, добавьте это выражение в ваше предложение GROUP BY.

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