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

Откуда:
Сообщений: 22
Добрый день. Написал запрос в базу, где беру один параметр с датой и форматирую его в 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


Сообщение было отредактировано: 24 окт 19, 11:29
24 окт 19, 10:57    [22001428]     Ответить | Цитировать Сообщить модератору
 Re: Формат месяца на русском языке  [new]
court
Member

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

Set language English
select DATENAME(Month,getdate()) AS Month
select format(getdate(), 'MMMM', 'ru-RU') 
24 окт 19, 11:26    [22001455]     Ответить | Цитировать Сообщить модератору
 Re: Формат месяца на русском языке  [new]
Владислав Колосов
Member

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

SET LANGUAGE N'RUSSIAN' устанавливается для сеанса с SQL Server. В справке есть информация.
Или в параметрах соединения укажите Default Language=Russian.
24 окт 19, 11:40    [22001480]     Ответить | Цитировать Сообщить модератору
 Re: Формат месяца на русском языке  [new]
AndrF
Member

Откуда:
Сообщений: 2194
Более правильно - не заниматься форматированием на сервере. У пользователя могут быть свои предпочтения, выставленные в региональных установках Windows, а вы ему подсовываете то что ему совершенно не нужно.
24 окт 19, 11:44    [22001483]     Ответить | Цитировать Сообщить модератору
 Re: Формат месяца на русском языке  [new]
Bereteli
Member

Откуда:
Сообщений: 22
вы все пишете set language, но я просто не понимаю, куда именно в моем коде ставить это?
24 окт 19, 12:17    [22001554]     Ответить | Цитировать Сообщить модератору
 Re: Формат месяца на русском языке  [new]
msLex
Member

Откуда:
Сообщений: 8152
Bereteli
вы все пишете set language, но я просто не понимаю, куда именно в моем коде ставить это?

а куда вы пытаетесь?
24 окт 19, 12:18    [22001556]     Ответить | Цитировать Сообщить модератору
 Re: Формат месяца на русском языке  [new]
Владислав Колосов
Member

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

поддерживаю. Форматированием полученных данных по возможности должен заниматься клиент. Существуют принципы хранения и получения данных, основанные на достоверности и целостности. Это означает, что сервер гарантирует, что данные, которые на нем сохранены, будут возвращены в том же виде, что и получены. Как следствие, при получении внешним приложением данные должны вернуться в том же виде, в котором их разместило это или другое приложение. Отсутствие каких-либо преобразований или подмены данных гарантирует качество результата.

К примеру, пользователь сохранил даты на сервере в двоичном представлении типа даты-времени, но извлёк данные в виде текстовой строки. Очевидно, что сохраненные и полученные запросом данные сверить нельзя и подтвердить их достоверность также нельзя, можно лишь предполагать, что сравнение разнородных данных выполнено верно.

Назначение преобразования числа с слово месяца - это обработка и преобразование с последующим сохранением при помощи бизес-логики, размещённой на сервере баз данных. Например, если необходимо подготовить счет клиенту, то мы может написать месяц в понятной человеку форме в таблицу счетов. Клиентское приложение извлечёт данные счёта в готовом виде. Подчеркну, что запрос, который извлекает данные из таблицы счетов не производит никаких преобразований.
24 окт 19, 12:23    [22001567]     Ответить | Цитировать Сообщить модератору
 Re: Формат месяца на русском языке  [new]
Владислав Колосов
Member

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

как Вы подключаетесь к серверу БД?
24 окт 19, 12:26    [22001573]     Ответить | Цитировать Сообщить модератору
 Re: Формат месяца на русском языке  [new]
Bereteli
Member

Откуда:
Сообщений: 22
msLex,
 ConnectionString ="  set language russian
WITH NEWSUM AS(


Select
(m.StockID) AS StockID,
CAST(m.DocDate as date) AS DocDate,
(DATEPART(hh,m.DocTime)) AS DocTime ,

(c.PcatName) as PcatName,
(g.PGRName) AS PGRName,
(g1.PGRName1) AS PGRName1,
(g3.PGRName3) AS PGRName3,
(g7.PGrName7) AS PGrName7,
(ga.PGrAName) AS PGrAName,

SUM(d.Qty) AS Qty,
SUM(0) AS QtyV,
SUM(d.SumCC_wt ) AS SumK,
Sum(0) AS SumKV,
(DATEPART(yyyy,m.DocTime)) AS Year,
DATENAME(Month,m.DocTime) AS Month
24 окт 19, 12:28    [22001576]     Ответить | Цитировать Сообщить модератору
 Re: Формат месяца на русском языке  [new]
msLex
Member

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

ConnectionString ="  set language russian
;WITH NEWSUM AS(


Select
	(m.StockID) AS StockID,
CAST(m.DocDate as date) AS DocDate, 
		(DATEPART(hh,m.DocTime)) AS DocTime ,

       (c.PcatName) as PcatName,
  (g.PGRName) AS PGRName,
	(g1.PGRName1) AS PGRName1,
  (g3.PGRName3) AS PGRName3,
  (g7.PGrName7) AS PGrName7,
  (ga.PGrAName) AS PGrAName, 
   
 SUM(d.Qty) AS Qty,
   SUM(0) AS QtyV,
SUM(d.SumCC_wt ) AS SumK,
Sum(0) AS SumKV,
(DATEPART(yyyy,m.DocTime)) AS Year,
DATENAME(Month,m.DocTime) AS Month


то, что вы в ConnectionString записываете команду, я опущу
24 окт 19, 12:31    [22001582]     Ответить | Цитировать Сообщить модератору
 Re: Формат месяца на русском языке  [new]
Bereteli
Member

Откуда:
Сообщений: 22
msLex, выдает ошибку
"Преобразование типа данных varchar в тип данных smalldatetime привело к выходу значения за пределы диапазона."
24 окт 19, 12:38    [22001591]     Ответить | Цитировать Сообщить модератору
 Re: Формат месяца на русском языке  [new]
komrad
Member

Откуда:
Сообщений: 5250
msLex
Bereteli,

ConnectionString ="set language russian;
WITH NEWSUM AS(


по-хорошему, вот так
24 окт 19, 12:39    [22001592]     Ответить | Цитировать Сообщить модератору
 Re: Формат месяца на русском языке  [new]
Bereteli
Member

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

"Преобразование типа данных varchar в тип данных smalldatetime привело к выходу значения за пределы диапазона."
24 окт 19, 12:44    [22001599]     Ответить | Цитировать Сообщить модератору
 Re: Формат месяца на русском языке  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Bereteli
komrad,

"Преобразование типа данных varchar в тип данных smalldatetime привело к выходу значения за пределы диапазона."

Понятное дело. Используйте FORMAT пример выше уже дали
24 окт 19, 12:45    [22001601]     Ответить | Цитировать Сообщить модератору
 Re: Формат месяца на русском языке  [new]
Bereteli
Member

Откуда:
Сообщений: 22
Вот весь код, возможно ошибка из-за того, что количество select несколько а set всего 1?
let
ConnectionString =" set language russian;
WITH NEWSUM AS(
Select
DATENAME(Month,m.DocTime) AS Month
from t_Sale m With(NoLock)
Inner Join t_SaleD d With(NoLock) On d.ChID = m.ChID

UNION ALL
Select
DATENAME(Month,m.DocTime)
from t_CRRet m With(NoLock)
Inner Join t_CRRetD d With(NoLock) On d.ChID = m.ChID

SELECT

a.Month as Месяц
FROM NEWSUM a
24 окт 19, 12:46    [22001603]     Ответить | Цитировать Сообщить модератору
 Re: Формат месяца на русском языке  [new]
Bereteli
Member

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

Incorrect syntax near 'format'.

 ConnectionString =" set language russian;
WITH NEWSUM AS(

Select
DATENAME(Month,m.DocTime) AS Month
format(m.DocTime, 'MMMM', 'ru-RU')
24 окт 19, 12:50    [22001607]     Ответить | Цитировать Сообщить модератору
 Re: Формат месяца на русском языке  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Bereteli
TaPaK,

Incorrect syntax near 'format'.

 ConnectionString =" set language russian;
WITH NEWSUM AS(

Select
DATENAME(Month,m.DocTime) AS Month
format(m.DocTime, 'MMMM', 'ru-RU')

ну запятую поставьте, например
24 окт 19, 12:51    [22001608]     Ответить | Цитировать Сообщить модератору
 Re: Формат месяца на русском языке  [new]
Владислав Колосов
Member

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

закрывающей скобки не хватает.
24 окт 19, 12:52    [22001611]     Ответить | Цитировать Сообщить модератору
 Re: Формат месяца на русском языке  [new]
Bereteli
Member

Откуда:
Сообщений: 22
Всем огромное спасибо за отклик и помощь.
Оказалось проблема была в самих датах, а не в командах.
ConnectionString ="set language russian; [b]SET DATEFORMAT ymd[/b];
WITH NEWSUM AS([b][/b]
24 окт 19, 14:20    [22001708]     Ответить | Цитировать Сообщить модератору
 Re: Формат месяца на русском языке  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Bereteli
Всем огромное спасибо за отклик и помощь.
Оказалось проблема была в самих датах, а не в командах.
ConnectionString ="set language russian; [b]SET DATEFORMAT ymd[/b];
WITH NEWSUM AS([b][/b]

как это печально
24 окт 19, 14:29    [22001721]     Ответить | Цитировать Сообщить модератору
 Re: Формат месяца на русском языке  [new]
Bereteli
Member

Откуда:
Сообщений: 22
TaPaK,
так только начал знакомство((
24 окт 19, 15:16    [22001798]     Ответить | Цитировать Сообщить модератору
 Re: Формат месяца на русском языке  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
А если я в Москве, сервер стоит в Лондоне, а пользователь сидит в Париже?
Он что же, будет получать даты на русском языке??
24 окт 19, 15:24    [22001804]     Ответить | Цитировать Сообщить модератору
 Re: Формат месяца на русском языке  [new]
Ftt330
Member

Откуда:
Сообщений: 7
Владислав Колосов
AndrF,

поддерживаю. Форматированием полученных данных по возможности должен заниматься клиент. Существуют принципы хранения и получения данных, основанные на достоверности и целостности. Это означает, что сервер гарантирует, что данные, которые на нем сохранены, будут возвращены в том же виде, что и получены. Как следствие, при получении внешним приложением данные должны вернуться в том же виде, в котором их разместило это или другое приложение. Отсутствие каких-либо преобразований или подмены данных гарантирует качество результата.

К примеру, пользователь сохранил даты на сервере в двоичном представлении типа даты-времени, но извлёк данные в виде текстовой строки. Очевидно, что сохраненные и полученные запросом данные сверить нельзя и подтвердить их достоверность также нельзя, можно лишь предполагать, что сравнение разнородных данных выполнено верно.

Назначение преобразования числа с слово месяца - это обработка и преобразование с последующим сохранением при помощи бизес-логики, размещённой на сервере баз данных. Например, если необходимо подготовить счет клиенту, то мы может написать месяц в понятной человеку форме в таблицу счетов. Клиентское приложение извлечёт данные счёта в готовом виде. Подчеркну, что запрос, который извлекает данные из таблицы счетов не производит никаких преобразований.

Хранить месяц в таблице счетов прописью - это гениально.
24 окт 19, 15:25    [22001806]     Ответить | Цитировать Сообщить модератору
 Re: Формат месяца на русском языке  [new]
4d_monster
Member

Откуда: Москва
Сообщений: 1613
iap
А если я в Москве, сервер стоит в Лондоне, а пользователь сидит в Париже?
Он что же, будет получать даты на русском языке??

"А русский учи! Пригодится!"
24 окт 19, 15:26    [22001810]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить