Страницы: 1
RSS
Месяц из даты на русском языке, SQL format
 
Добрый день. Написал запрос в базу, где беру один параметр с датой и форматирую его в 3 столбца формата: Дата; Год; Месяц. И вот последний столбик Месяц преобразуется в Febrary, June и т.п.  Везде облазил и пишут, что нужно ставить "Set language Russian". Ставил после кавычек выдало ошибку  - "Преобразование типа данных varchar в тип данных smalldatetime привело к выходу значения за пределы диапазона", и куда я его только не вставлял. Может кто-то подскажет как в итоге вывести месяца на русском языке/
Код
let

       DateBegin = DateTime.ToText( Excel.CurrentWorkbook(){[Name="DateBegin"]}[Content]{0}[Column1], "yyyy-MM-dd"),
    DateEnd = DateTime.ToText( Excel.CurrentWorkbook(){[Name="DateEnd"]}[Content]{0}[Column1], "yyyy-MM-dd"),
 ConnectionString ="
WITH NEWSUM AS(
Select
   (m.StockID) AS StockID,
CAST(m.DocDate as date) AS DocDate, 
(DATEPART(hh,m.DocTime)) AS Hour ,
(DATEPART(yyyy,m.DocTime)) AS Year,
DATENAME(Month,m.DocTime) AS Month

from t_Sale m With(NoLock)
   Inner Join t_SaleD d With(NoLock) On d.ChID = m.ChID
                  
where 
m.StockID not in (102,115,116)
and ((m.DocDate Between '" & DatePre & "' and '" & DatePre2 & "') or (m.DocDate Between '" & DateBegin & "' and '" & DateEnd & "') )
                                    
GROUP BY m.StockID, m.DocDate, m.DocTime, c.PcatName, g.PGRName, g1.PGRName1,
 g3.PGRName3, g7.PGrName7, ga.PGrAName
 
Изменено: bereteli - 24.10.2019 09:42:58
 
Если не придумаете ничего лучшего просто замените его в конечной ячейке формулой
Код
=ВПР(A1;{"January";"Январь":"February";"Февраль":"March";"Март":"April";"Апрель":"May";"Май":"June";"Июнь":"July";"Июль":"August";"Август":"September";"Сентябрь":"October";"Октябрь":"November";"Ноябрь":"December";"Декабрь"};2;0)
или для красоты спрячьте таблицу внутрь именованного диапазона
 
А что в SQL нельзя объявить табличку с соответствиями месяцев и в лоб к столбцу с английскими названиями приджойнить русские? Ну, если с настройками не выходит.
Опять же, раз вы в БД лезете при помощи PQ, то можно такой джойн проделать силами PQ после получения массива из БД.
Если решение на PQ заинтересует, то публикуйте запрос целиком и в файлике покажите структуру таблички, которую получаете из БД с английскими названиями месяцев.
Вот горшок пустой, он предмет простой...
 
Впр это немного из другой оперы))
PQ,я могу это сделать одним действием, но мне очень хочется это сделать в sql. PQ я с самой даты преобразовать в месяц могу, но проблема в том, что на удаленке pq кушает больше ресурсов чем sql.
 
Цитата
PooHkrd написал:
А что в SQL нельзя объявить табличку с соответствиями месяцев и в лоб к столбцу с английскими названиями приджойнить русские?
А этот вариант не реально реализовать? Я в SQL не силен, но что джойнить в нем можно знаю, вопрос в том, позволяет ли синтаксис использовать для джойна таблицы не из БД, а сформированные прямо в запросе.
Вот горшок пустой, он предмет простой...
 
bereteli, SQL и Excel  находятся немного по разные стороны этого форума. У вас в примере синтаксис чего? Это не просто запрос с синтаксисом SQL, который может быть выполнен, как скриптом VBA, так и прочими инструментами.
По вопросам из тем форума, личку не читаю.
 
Где тогда сидят те, кто мне может помочь?
 
БМВ, это кусок запроса PQ, в котором генерируется строка запроса к серверу SQL. А вот какая это разновидность SQL сие мне не ведомо.
bereteli, есть такой ресурс там и форум есть.
Вот горшок пустой, он предмет простой...
 
bereteli, ещё такой ресурс тыц
 
всем спасибо, жаль тут не дали решение( любимый форум)
 
Цитата
PooHkrd написал:
БМВ , это кусок запроса PQ,
да это то я понял по let? Просто вопрос касается реально SQL
bereteli, согласно https://docs.microsoft.com/ru-RU/sql/t-sql/functions/datename-transact-sql?view=sql-server-2017 вернет в языке сервера SQL по умолчанию, а вот SET LANGUAGE не может быт указана в запросе, для некоторых провайдеров может быть использован в строке коннекта параметр LANGUAGE или LANGUAGEID.

может Андрей VG,  что скажет, а то на форуме есть а в теме нет :-)
Изменено: БМВ - 24.10.2019 11:39:31
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
что скажет
Привет, Михаил.
А что говорить-то, если ТС, как пленный партизан молчит и не сообщает, с чем дело имеет. Боюсь и sql.ru его также куда-нибудь пошлют :)  
В Microsoft SQL Server, начиная с 2016, можно так
Код
Select Format(GetDate(), N'MMMM', N'ru-RU')
Изменено: Андрей VG - 24.10.2019 12:28:05
 
@Андрей VG я работаю в excel данные запрос к sql server.  попытался вашу строчку вписать выдало - Format' is not a recognized built-in function name.
Код
Format(M.DocTime, N'MMMM', N'ru-RU') as Month
 
Цитата
bereteli написал:
ormat' is not a recognized built-in function name.
Версию нужно сообщать? Вы настолько уверены, что версии SQL Server Microsoft выпускает только с целью денег получить, а никакой новой функциональности не добавляет?
Цитата
bereteli написал:
пишут, что нужно ставить "Set language Russian"
Правильно пишут, конструкция вполне рабочая. Вообще запросы из Power Query вполне себе процедурные
Код
let
    Source = Sql.Database("serverName\instanceName", "databaseName", [
        Query=
"Set Language Russian;
Select DateName(Month, GETDATE());"
    ])
in
    Source
Изменено: Андрей VG - 24.10.2019 12:46:12
 
Андрей VG, спасибо за помощь. К сожалению не смог опробовать ваш способ.

Решение найдено:
Код
ConnectionString ="set language russian; SET DATEFORMAT ymd;
WITH NEWSUM AS(
Оказалось проблема была в форматах дат.
Страницы: 1
Наверх