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

Откуда:
Сообщений: 331
Как в SQL вывести даты в виде:
2014 Декабрь
2015 Январь
2015 Март
2015 Апрель
...


В access работал
(Format([DateDoc],'yyyy mmmm'))
, а тут чем его заменить?
23 июн 15, 13:59    [17806682]     Ответить | Цитировать Сообщить модератору
 Re: Изменение формата дат  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
ypmail,

select GETDATE(),DATENAME(yy,GETDATE())+' '+DATENAME(mm,GETDATE())
23 июн 15, 14:06    [17806732]     Ответить | Цитировать Сообщить модератору
 Re: Изменение формата дат  [new]
ypmail
Member

Откуда:
Сообщений: 331
LexusR,

Не совсем понял куда мне свой DateDoc воткнуть? Прошу не пинать, я только учусь...
23 июн 15, 14:22    [17806822]     Ответить | Цитировать Сообщить модератору
 Re: Изменение формата дат  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
ypmail,

select DATENAME(yy,DateDoc)+' '+DATENAME(mm,DateDoc)
23 июн 15, 14:25    [17806832]     Ответить | Цитировать Сообщить модератору
 Re: Изменение формата дат  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2421
ypmail
Как в SQL вывести даты в виде:
2014 Декабрь
2015 Январь
2015 Март
2015 Апрель
...


В access работал
(Format([DateDoc],'yyyy mmmm'))
, а тут чем его заменить?


На скуле так же работает (если версия позволяет:)
select FORMAT(getdate(), 'yyyy MMMM')
23 июн 15, 14:27    [17806844]     Ответить | Цитировать Сообщить модератору
 Re: Изменение формата дат  [new]
ypmail
Member

Откуда:
Сообщений: 331
Спасибо, всё работает!
Только с сортировкой сначала по году, а потом по месяцу пока тупик...
23 июн 15, 14:34    [17806880]     Ответить | Цитировать Сообщить модератору
 Re: Изменение формата дат  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
ypmail,

order by Year(DateDoc),Month(DateDoc)
23 июн 15, 14:36    [17806884]     Ответить | Цитировать Сообщить модератору
 Re: Изменение формата дат  [new]
ypmail
Member

Откуда:
Сообщений: 331
Пробовал, но выдаёт ошибку:

2 Процедура test4. Предложение ORDER BY не допускается в представлениях, встроенных функциях, производных таблицах, вложенных запросах и обобщенных табличных выражениях, если не указано TOP или FOR XML.
23 июн 15, 14:40    [17806906]     Ответить | Цитировать Сообщить модератору
 Re: Изменение формата дат  [new]
ypmail
Member

Откуда:
Сообщений: 331
WarAnt
На скуле так же работает (если версия позволяет:)
select FORMAT(getdate(), 'yyyy MMMM')


2012 скул - не работает

Ошибка: 3 FORMAT не является известным имя встроенной функции.

SELECT FORMAT(DateDoc, 'yyyy MMMM') AS Date
FROM qdfTable1
23 июн 15, 14:49    [17806958]     Ответить | Цитировать Сообщить модератору
 Re: Изменение формата дат  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
LexusR
ypmail,

order by Year(DateDoc),Month(DateDoc)
ORDER BY CONVERT(CHAR(6),DateDoc,112)
23 июн 15, 14:50    [17806961]     Ответить | Цитировать Сообщить модератору
 Re: Изменение формата дат  [new]
ypmail
Member

Откуда:
Сообщений: 331
iap
LexusR
ypmail,

order by Year(DateDoc),Month(DateDoc)
ORDER BY CONVERT(CHAR(6),DateDoc,112)


Не допускается в представлениях и т.д. как в сообщении выше
23 июн 15, 14:54    [17806987]     Ответить | Цитировать Сообщить модератору
 Re: Изменение формата дат  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
select format(getdate(),'yyyy MMMM','Ru-ru')

Если не работает, то у Вас не 2012 или выше.
23 июн 15, 14:55    [17807000]     Ответить | Цитировать Сообщить модератору
 Re: Изменение формата дат  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
ypmail
iap
пропущено...
ORDER BY CONVERT(CHAR(6),DateDoc,112)



Не допускается в представлениях и т.д. как в сообщении выше
Что Вы заладили?
Где запрос? Иначе говорить просто не о чем.

Официальная позиция MS такая. ORDER BY надо писать во внешнем запросе, в котором участвует
представление (или функция). Выборка из представления ничем не отличается от выборки из таблицы,
а значит, она изначально неупорядочена. Есть кое-какие "хакерские" приёмы, однако.
23 июн 15, 14:58    [17807028]     Ответить | Цитировать Сообщить модератору
 Re: Изменение формата дат  [new]
ypmail
Member

Откуда:
Сообщений: 331
iap,

Ну пока вот что получилось:
CREATE VIEW dbo.test4
AS
SELECT DATENAME(yy,DateProform)+' '+DATENAME(mm,DateProform) AS Date, (SELECT STUFF((SELECT ', ' + NameProf 
    FROM qdfAccount1 WHERE DATENAME(yy,DateProform)+' '+DATENAME(mm,DateProform) = DATENAME(yy,c.DateProform)+' '+DATENAME(mm,c.DateProform)
    GROUP BY NameProf, DATENAME(yy,DateProform)+' '+DATENAME(mm,DateProform)
    FOR XML PATH('')),1,2,'')) 
AS PerProforma
FROM qdfAccount1 c
GROUP BY DATENAME(yy,DateProform)+' '+DATENAME(mm,DateProform)
;
GO


Слева получаются годы с месяцами вразнобой, но сгруппированные, а справа номера документов. SQL 2008, извиняюсь.
23 июн 15, 15:03    [17807054]     Ответить | Цитировать Сообщить модератору
 Re: Изменение формата дат  [new]
ypmail
Member

Откуда:
Сообщений: 331


К сообщению приложен файл. Размер - 58Kb
23 июн 15, 15:06    [17807076]     Ответить | Цитировать Сообщить модератору
 Re: Изменение формата дат  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
ypmail
WHERE DATENAME(yy,DateProform)+' '+DATENAME(mm,DateProform) = DATENAME(yy,c.DateProform)+' '+DATENAME(mm,c.DateProform)
Это что за урод такой?
DATEDIFF(MONTH,DateProform,c.DateProform)=0
не короче будет?

Зачем порядок записей именно в представлении?
23 июн 15, 15:11    [17807114]     Ответить | Цитировать Сообщить модератору
 Re: Изменение формата дат  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4264
ypmail
Пробовал, но выдаёт ошибку:

2 Процедура test4. Предложение ORDER BY не допускается в представлениях, встроенных функциях, производных таблицах, вложенных запросах и обобщенных табличных выражениях, если не указано TOP или FOR XML.


SELECT TOP 100 PERCENT ...
23 июн 15, 15:38    [17807309]     Ответить | Цитировать Сообщить модератору
 Re: Изменение формата дат  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
SQL2008
ypmail
Пробовал, но выдаёт ошибку:

2 Процедура test4. Предложение ORDER BY не допускается в представлениях, встроенных функциях, производных таблицах, вложенных запросах и обобщенных табличных выражениях, если не указано TOP или FOR XML.


SELECT TOP 100 PERCENT ...
Игнорируется, начиная с SQL 2005!
23 июн 15, 15:41    [17807328]     Ответить | Цитировать Сообщить модератору
 Re: Изменение формата дат  [new]
ypmail
Member

Откуда:
Сообщений: 331
iap
ypmail
WHERE DATENAME(yy,DateProform)+' '+DATENAME(mm,DateProform) = DATENAME(yy,c.DateProform)+' '+DATENAME(mm,c.DateProform)
Это что за урод такой?
DATEDIFF(MONTH,DateProform,c.DateProform)=0
не короче будет?


Короче, но так не работает.

Зачем порядок записей именно в представлении?


Как-то в access проблем с ORDER BY не возникало, привык сразу видеть красивую отсортированную таблицу. К тому же потом при экспорте в excel не нужно будет сортировать записи.
23 июн 15, 15:42    [17807332]     Ответить | Цитировать Сообщить модератору
 Re: Изменение формата дат  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
SELECT TOP(9223372036854775807) ...


Но, повторяю, непонятно, зачем это надо именно внутри представления
23 июн 15, 15:46    [17807365]     Ответить | Цитировать Сообщить модератору
 Re: Изменение формата дат  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
ypmail
Короче, но так не работает
Это почему??
Как это выражается?
23 июн 15, 15:47    [17807368]     Ответить | Цитировать Сообщить модератору
 Re: Изменение формата дат  [new]
ypmail
Member

Откуда:
Сообщений: 331
iap,

Потому что появдяется сообщение: "2 Процедура test5. Столбец "qdfAccount1.DateProform" недопустим в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY."

Если в GROUP BY в конце дописать ,DateProform, то всё начинает работать, но тогда данные задваиваются. Получается 2 строки 2014 Январь, 2 строки 2014 Февраль и т.д...
23 июн 15, 16:01    [17807458]     Ответить | Цитировать Сообщить модератору
 Re: Изменение формата дат  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
ypmail
iap,

Потому что появдяется сообщение: "2 Процедура test5. Столбец "qdfAccount1.DateProform" недопустим в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY."

Если в GROUP BY в конце дописать ,DateProform, то всё начинает работать, но тогда данные задваиваются. Получается 2 строки 2014 Январь, 2 строки 2014 Февраль и т.д...
А так работает?
SELECT DISTINCT DATENAME(yy,DateProform)+' '+DATENAME(mm,DateProform) AS Date,
(SELECT DISTINCT STUFF((SELECT ', ' + NameProf 
 FROM qdfAccount1
 WHERE DATEDIFF(MONTH,DateProform,c.DateProform)=0
 FOR XML PATH('')),1,2,'')) AS PerProforma
FROM qdfAccount1 c
23 июн 15, 16:21    [17807567]     Ответить | Цитировать Сообщить модератору
 Re: Изменение формата дат  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
iap
ypmail
iap,

Потому что появдяется сообщение: "2 Процедура test5. Столбец "qdfAccount1.DateProform" недопустим в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY."

Если в GROUP BY в конце дописать ,DateProform, то всё начинает работать, но тогда данные задваиваются. Получается 2 строки 2014 Январь, 2 строки 2014 Февраль и т.д...
А так работает?
SELECT DISTINCT DATENAME(yy,DateProform)+' '+DATENAME(mm,DateProform) AS Date,
(SELECT DISTINCT STUFF((SELECT ', ' + NameProf 
 FROM qdfAccount1
 WHERE DATEDIFF(MONTH,DateProform,c.DateProform)=0
 FOR XML PATH('')),1,2,'')) AS PerProforma
FROM qdfAccount1 c
Надо подправить, а то снаружи DISTINCT может не работать, если порядок перечисления внутри не фиксирован.
SELECT DISTINCT DATENAME(yy,DateProform)+' '+DATENAME(mm,DateProform) AS Date,
 STUFF((SELECT DISTINCT ', ' + NameProf 
 FROM qdfAccount1
 WHERE DATEDIFF(MONTH,DateProform,c.DateProform)=0
 ORDER BY NameProf
 FOR XML PATH('')),1,2,'') AS PerProforma
FROM qdfAccount1 c
23 июн 15, 16:30    [17807627]     Ответить | Цитировать Сообщить модератору
 Re: Изменение формата дат  [new]
ypmail
Member

Откуда:
Сообщений: 331
iap,
Ошибка:
Элементы ORDER BY должны входить в список выбора, если указывается SELECT DISTINCT.
24 июн 15, 06:55    [17809282]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить