Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Запрос на вывод месяцев в буквенном виде  [new]
shoxel
Member

Откуда:
Сообщений: 23
Имеется столбец с форматом дата вида гггг.мм.дд. В нем много различных дат.

Требуется выбрать лишь месяцы и представить их в буквенном виде типа january и упорядочить в порядке месяцев.

Пробовал Datename(M,date), но в таком случае названия месяцев сортируются в алфавитном порядке.

как мне из даты получить список месяцев в буквенном виде и отсортированных в порядке месяцев????
13 ноя 13, 20:35    [15124472]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на вывод месяцев в буквенном виде  [new]
shoxel
Member

Откуда:
Сообщений: 23
и без повторов.. чтобы было в итоге 12 месяцев
13 ноя 13, 20:40    [15124493]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на вывод месяцев в буквенном виде  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
shoxel,

поле какого типа?
13 ноя 13, 20:40    [15124495]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на вывод месяцев в буквенном виде  [new]
shoxel
Member

Откуда:
Сообщений: 23
Первоначальная дата Datetime. потом не суть в каком будет формате. главное 12 месяцев
13 ноя 13, 20:52    [15124546]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на вывод месяцев в буквенном виде  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31437
shoxel
как мне из даты получить список месяцев в буквенном виде и отсортированных в порядке месяцев????
Выводите Datename, сортируйте по дате (или по номеру месяца), в чём проблема?
13 ноя 13, 21:24    [15124626]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на вывод месяцев в буквенном виде  [new]
Гость333
Member

Откуда:
Сообщений: 3683
select datename(month, t.dat)
from MyTable t
order by datepart(month, t.dat)

Это если вам всё равно, что за январём 2013 последует февраль 2012 и март 2011. Если не всё равно, то order by datepart(year, t.dat), datepart(month, t.dat).
14 ноя 13, 01:04    [15125250]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на вывод месяцев в буквенном виде  [new]
shoxel
Member

Откуда:
Сообщений: 23
Гость333,
В таком случае мне выдаст 16 тысяч строк. они конечно рассортированы, но их 16 тысяч.. мне нужно каждого месяца 1 шт
14 ноя 13, 02:42    [15125376]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на вывод месяцев в буквенном виде  [new]
kalakhary
Member

Откуда:
Сообщений: 17
Может так?

with t (name_date, num_month) as
(select distinct datename(month, dat), datepart(month, dat) from MyTable)
select name_date from t order by num_month
14 ноя 13, 08:44    [15125648]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на вывод месяцев в буквенном виде  [new]
aleks2
Guest
shoxel
Гость333,
В таком случае мне выдаст 16 тысяч строк. они конечно рассортированы, но их 16 тысяч.. мне нужно каждого месяца 1 шт


select DISTINCT datename(month, t.dat)
from MyTable t
order by datepart(month, t.dat)


Тока лучше иди в управдомы.
14 ноя 13, 08:44    [15125649]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на вывод месяцев в буквенном виде  [new]
PsyMisha
Member

Откуда: другая столица
Сообщений: 773
как еще один вариант:

DECLARE @MyIntLoop AS INTEGER
DECLARE @MyMonthLoop AS INTEGER
SET @MyIntLoop = 0
SET @MyMonthLoop = 0

IF OBJECT_ID('tempdb..#MyTempTable_MonthsEnum') IS NOT NULL  
DROP TABLE #MyTempTable_MonthsEnum

CREATE TABLE #MyTempTable_MonthsEnum
(
    [Year] INTEGER,
    [Month] INTEGER
)

WHILE @MyIntLoop < 12
BEGIN
      INSERT INTO #MyTempTable_MonthsEnum
      SELECT
      DATEPART(YEAR, (DATEADD(MONTH, @MyMonthLoop, CAST(GETUTCDATE() AS DATE)))) AS 'Year',
      DATEPART(MONTH, (DATEADD(MONTH, @MyMonthLoop, CAST(GETUTCDATE() AS DATE)))) AS 'Month'
      
      SET @MyIntLoop += 1
      SET @MyMonthLoop -=1
END


SELECT * FROM #MyTempTable_MonthsEnum

DROP TABLE #MyTempTable_MonthsEnum



В основном скрипте можно делать селект с этой временной таблицы и LEFT OUTER JOIN с основной рабочей.
В итоге в результирующий набор попадут все 12 месяцев с enum table, а те месяцы, что пропущены в основной - будут как NULL
14 ноя 13, 11:01    [15126338]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на вывод месяцев в буквенном виде  [new]
Гость333
Member

Откуда:
Сообщений: 3683
aleks2
select DISTINCT datename(month, t.dat)
from MyTable t
order by datepart(month, t.dat)

Не пройдёт, ибо "ORDER BY items must appear in the select list if SELECT DISTINCT is specified".
Надо так:
select datename(month, t.dat), sum(...) -- если, кроме месяца, надо вывести полезную информацию
from MyTable t
group by datename(month, t.dat), datepart(month, t.dat)
order by datepart(month, t.dat)
14 ноя 13, 11:04    [15126362]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на вывод месяцев в буквенном виде  [new]
shoxel
Member

Откуда:
Сообщений: 23
.Гость333,
То что нужно) спасибо
14 ноя 13, 13:12    [15127569]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить