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

Откуда:
Сообщений: 2056
Здравствуйте!

Написал SQL-запрос. Запустил запрос - выгружает так как надо.

Потом в области результата нажимаю "Выделить все" и "Скопировать с заголовками". Вставляю в эксель и превращаю в умную таблицу. Вместо значения "12.50" показывает дату. Если преобразовать эту дату, то показывает другое число.

Учитывая, что в запросе поле записано так
CAST(Round(Таблица.Поле,2) AS NUMERIC (8,2)) AS [Поле]

Сначала округляет, потом срезает до сотых.

Почему так? Откуда это другое число? Или как правильно написать строку в запросе? Или надо по другому копировать?

К сообщению приложен файл. Размер - 15Kb
19 янв 18, 08:47    [21118669]     Ответить | Цитировать Сообщить модератору
 Re: Копирование результата в эксель  [new]
Massa52
Member

Откуда:
Сообщений: 379
ferzmikk,
Ищите на стороне Excel - вероятнее всего разделителем дробной части там запятая.
19 янв 18, 08:56    [21118685]     Ответить | Цитировать Сообщить модератору
 Re: Копирование результата в эксель  [new]
ГуЗы
Guest
ferzmikk,
Перед вставкой в excel измените тип ячеек столбца на нужный. И все.
19 янв 18, 09:37    [21118791]     Ответить | Цитировать Сообщить модератору
 Re: Копирование результата в эксель  [new]
ferzmikk
Member

Откуда:
Сообщений: 2056
ГуЗы
ferzmikk,
Перед вставкой в excel измените тип ячеек столбца на нужный. И все.

Но там, вместо "12.50" показывает "18 598,00"
Не могу понять откуда это число берется.
19 янв 18, 09:45    [21118825]     Ответить | Цитировать Сообщить модератору
 Re: Копирование результата в эксель  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
ferzmikk
ГуЗы
ferzmikk,
Перед вставкой в excel измените тип ячеек столбца на нужный. И все.

Но там, вместо "12.50" показывает "18 598,00"
Не могу понять откуда это число берется.

Excel хранит даты в виде инта (количество дней, прошедших с 1900-01-01), 12.50 - 1950-12-01 -> 18596 дней. Что ты и получаешь, когда включаешь в столбце формат числа.

Менять формат столбца нужно ПЕРЕД вставкой данных.
19 янв 18, 09:48    [21118836]     Ответить | Цитировать Сообщить модератору
 Re: Копирование результата в эксель  [new]
ferzmikk
Member

Откуда:
Сообщений: 2056
Руслан Дамирович
Менять формат столбца нужно ПЕРЕД вставкой данных.
Ну перед вставкой и менял формат колонки в экселе. Показывает "18 598,00"
19 янв 18, 10:00    [21118906]     Ответить | Цитировать Сообщить модератору
 Re: Копирование результата в эксель  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
ferzmikk
Руслан Дамирович
Менять формат столбца нужно ПЕРЕД вставкой данных.
Ну перед вставкой и менял формат колонки в экселе. Показывает "18 598,00"

У тебя в настройках чисел в WINDOWS стоит разделитель дробной части ","?
Либо смени разделитель, либо конвертируй в MONEY в SELECTе.
19 янв 18, 10:05    [21118942]     Ответить | Цитировать Сообщить модератору
 Re: Копирование результата в эксель  [new]
ferzmikk
Member

Откуда:
Сообщений: 2056
Руслан Дамирович
У тебя в настройках чисел в WINDOWS стоит разделитель дробной части ","?
А где именно находится это настройка?
Либо смени разделитель, либо конвертируй в MONEY в SELECTе.
Значения нужны до сотых. Переводить, например, в рубли как то не логично получается.
19 янв 18, 11:16    [21119309]     Ответить | Цитировать Сообщить модератору
 Re: Копирование результата в эксель  [new]
Massa52
Member

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

Control Panel\Clock, Language, and Region - тут задается формат.
12.50 для excel с вашей установко формата чисел в Windows должно быть 12,50
Поэтому excel пытается разобраться и как подсказали - конвертит его в дату.
19 янв 18, 13:19    [21119953]     Ответить | Цитировать Сообщить модератору
 Re: Копирование результата в эксель  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
[quot ferzmikk]
Руслан Дамирович
Либо смени разделитель, либо конвертируй в MONEY в SELECTе.
Значения нужны до сотых. Переводить, например, в рубли как то не логично получается.

Балбес, при чем здесь рубли?! Или тебя перевод смутил? Ну да, специальный синоним, который должен может использоваться для хранения денежных сумм.
Тестируй у себя преобразование данных:
DECLARE @v1 FLOAT = 123.4567
DECLARE @v2 NUMERIC(19,4) = 123.4567
DECLARE @v3 MONEY = 123.4567
SELECT
  [v1] = CONVERT( VARCHAR(30), @v1 ),
  [v2] = CONVERT( VARCHAR(30), @v2 ),
  [v3] = CONVERT( VARCHAR(30), @v3 )

У меня вот
v1v2v3
123.457123.4567123.46
19 янв 18, 13:33    [21120042]     Ответить | Цитировать Сообщить модератору
 Re: Копирование результата в эксель  [new]
ferzmikk
Member

Откуда:
Сообщений: 2056
Если зайти в Язык и региональные стандарты - Настройка формата и в поле Разделить целой и дробной части указать не ",", а ".", то отображает так.

К сообщению приложен файл. Размер - 4Kb
19 янв 18, 13:33    [21120044]     Ответить | Цитировать Сообщить модератору
 Re: Копирование результата в эксель  [new]
ferzmikk
Member

Откуда:
Сообщений: 2056
Руслан Дамирович
конвертируй в MONEY в SELECTе.
Получилось, спасибо!
19 янв 18, 13:45    [21120119]     Ответить | Цитировать Сообщить модератору
 Re: Копирование результата в эксель  [new]
tashkafox
Member

Откуда: Москва
Сообщений: 106
ferzmikk,
Перед вставкой также можно выделить весь лист, установить тип данных на Текстовый вместо Общий, тогда всё вставится так, как отображается в SSMS (если лень заморачиваться с типами данных в запросе).
19 янв 18, 14:20    [21120334]     Ответить | Цитировать Сообщить модератору
 Re: Копирование результата в эксель  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
tashkafox
ferzmikk,
Перед вставкой также можно выделить весь лист, установить тип данных на Текстовый вместо Общий, тогда всё вставится так, как отображается в SSMS (если лень заморачиваться с типами данных в запросе).
Это, конечно, тоже нехорошо.
Твердят же всегда (и в этом форуме) - ячейки в экселе должны быть правильного типа.
Но увы, вот так оно работает :-(
19 янв 18, 15:12    [21120625]     Ответить | Цитировать Сообщить модератору
 Re: Копирование результата в эксель  [new]
tashkafox
Member

Откуда: Москва
Сообщений: 106
alexeyvg
Твердят же всегда (и в этом форуме) - ячейки в экселе должны быть правильного типа.

Если отправлять Эксель в виде отчета другим сотрудникам - это одно дело, а если во время самопроверки разработчик, решил перепроверить свои расчеты в Экселе - это другое.

А тонкости округлений и другие вопросы, связанными с типами данных (если на это был намек), нужно всегда держать в голове, а не только при вставке в Эксель.
19 янв 18, 15:29    [21120721]     Ответить | Цитировать Сообщить модератору
 Re: Копирование результата в эксель  [new]
ferzmikk
Member

Откуда:
Сообщений: 2056
ferzmikk
CAST(Round(Таблица.Поле,2) AS NUMERIC (8,2)) AS [Поле]

CAST(Round(Таблица.Поле,2) AS MONEY) AS [Поле]

MONEY как влияет на время выполнения? Что то запрос намного дольше стал формироваться для 350 000 строк. В 13 из 48 полей используется такая запись. Более 30 мин. При NUMERIC намного быстрее формировался: 1,5 - 2 мин. Но пока не уверен, что из за MONEY.
19 янв 18, 15:44    [21120802]     Ответить | Цитировать Сообщить модератору
 Re: Копирование результата в эксель  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
tashkafox
А тонкости округлений и другие вопросы, связанными с типами данных (если на это был намек), нужно всегда держать в голове, а не только при вставке в Эксель.

А чтобы не держать - нужно уметь пользоваться внешними подключениями.

К сообщению приложен файл. Размер - 4Kb
19 янв 18, 15:46    [21120807]     Ответить | Цитировать Сообщить модератору
 Re: Копирование результата в эксель  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
tashkafox
А тонкости округлений и другие вопросы, связанными с типами данных (если на это был намек), нужно всегда держать в голове, а не только при вставке в Эксель.
Да какие "тонкости округлений"???

12.50 вставляет как Дек.50, ничего себе округление, я представляю, если бы SSMS так выводил результаты запросов для полей типа NUMERIC (8,2).

Выводи как число, не можешь, выводи как текст, как это до программиста не дошло???
19 янв 18, 17:10    [21121157]     Ответить | Цитировать Сообщить модератору
 Re: Копирование результата в эксель  [new]
ferzmikk
Member

Откуда:
Сообщений: 2056
ferzmikk
ferzmikk
CAST(Round(Таблица.Поле,2) AS NUMERIC (8,2)) AS [Поле]

CAST(Round(Таблица.Поле,2) AS MONEY) AS [Поле]

MONEY как влияет на время выполнения? Что то запрос намного дольше стал формироваться для 350 000 строк. В 13 из 48 полей используется такая запись. Более 30 мин. При NUMERIC намного быстрее формировался: 1,5 - 2 мин. Но пока не уверен, что из за MONEY.

Все таки, MONEY увеличивает время выполнения?
21 янв 18, 10:04    [21124025]     Ответить | Цитировать Сообщить модератору
 Re: Копирование результата в эксель  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
ferzmikk
Все таки, MONEY увеличивает время выполнения?
Сам по себе нет, а почему изменилось время, можно посмотреть в плане выполнения, может, он поменялся из за CAST(... AS MONEY)
21 янв 18, 10:48    [21124076]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить