Выбрать название месяца на основе различных дат в таблице - PullRequest
0 голосов
/ 25 октября 2019

У меня есть одна таблица, которая содержит столбец BillDate, т.е. Bill Dates для различных клиентов. Дата выставления счета варьируется от 1 сентября до 30 сентября. Исходя из даты выставления счета, я хочу получить название месяца в формате «19 сентября» (19 - 2019 год)

Проблема заключается в том, что со следующего месяцаBillDate будет иметь записи за сентябрь и октябрь 2019 года.

Для октября 2019 года я хочу получить счет за месяц «19 октября», так как я создам отчет на основе данных, представленных для счетов за октябрь месяц. .

Как получить счет за месяц на основе данных, которые меняются каждый месяц?

Ответы [ 4 ]

1 голос
/ 25 октября 2019

FORMAT - ужасная функция для этого, она ужасно медленная. Я настоятельно рекомендую CONVERT и код стиля, а также некоторые манипуляции со строками.

REPLACE(STUFF(CONVERT(varchar(11),BillDate,106),1,3,''),' ','-')
1 голос
/ 25 октября 2019

Один метод использует format():

select format(BillDate, 'MMM-yy')

Более старый метод создает строку:

select left(datename(month, BillDate), 3) + '-' + right(datename(year), BillDate), 2)
0 голосов
/ 25 октября 2019

Используйте функцию формата , чтобы преобразовать дату в ваш формат. И тогда вы можете использовать функцию where, чтобы получить результаты за текущий месяц (октябрь 2019).

Примечание. Формат - небольшая и приятная функция, если вы используете этот отчет для запроса небольших данных. Но если вы работаете с относительно большими наборами данных, я бы порекомендовал конвертировать, так как формат повлияет на производительность.

Select *
From
(select your_field1, your_field2, format(BillDate, 'MMM-yy') as Current_Date from your_table) as alias_table
Where [Current_Date] = format(GETDATE(), 'MMM-yy');

В SQL нельзя использовать имена столбцов псевдонимов в одном запросе, поэтому я использовалподзапрос в парантезе, чтобы заставить SQL обрабатывать, где, прежде чем выбрать.

0 голосов
/ 25 октября 2019

Вы можете попробовать это:

SELECT REPLACE(RIGHT(CONVERT(VARCHAR(20), BillDate, 106), 8), ' ', '-')

Для получения самых последних данных вы можете попробовать это

SELECT REPLACE(RIGHT(CONVERT(VARCHAR(20), BillDate, 106), 8), ' ', '-') AS 'YourColumnName' FROM TableName
ORDER BY BillDate DESC

Для целей тестирования: -

SELECT REPLACE(RIGHT(CONVERT(VARCHAR(20), GETDATE(), 106), 8), ' ', '-') AS 'CurrentDate'

Вывод : -

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