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

Откуда:
Сообщений: 79
Коллеги, помогите разобраться с проблемой.
Есть таблица с фактами продаж:
IDSKU – ID товара (int)
Date –дата отгрузки (datetime)
SEB-себестоимость (money)
Надо поменять себестоимость во Veiw
Делаю так:

WHEN IDSKU= '1200' AND substring(CONVERT(varchar, [Date]), 8, 4) = '2015' THEN CAST('1000,952' as MONEY) ELSE SEB END as SEB_NEW

P.S. substring(CONVERT(varchar, [Date]), 8, 4) = '2015' вытаскивает Год из даты.

В итоге в новой себестоимости пропадает разделитель разрядов и вместо 1000,952 получается 1000952
Что я делаю не так?
20 апр 16, 06:19    [19080352]     Ответить | Цитировать Сообщить модератору
 Re: Капризный тип данных MONEY  [new]
_djХомяГ
Guest
Разделителем целой и дробной части в вещ типах является точка, но никак не запятая
20 апр 16, 06:31    [19080354]     Ответить | Цитировать Сообщить модератору
 Re: Капризный тип данных MONEY  [new]
TaPaK
Member

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

WHEN IDSKU= '1200' AND substring(CONVERT(varchar, [Date]), 8, 4) = '2015' THEN CAST('1000,952' as MONEY) ELSE SEB END as SEB_NEW

substring(CONVERT(varchar, [Date]), 8, 4) переделать в DatePart
CAST('1000,952' as MONEY) судя по всему дело в языковых настройках
20 апр 16, 07:04    [19080372]     Ответить | Цитировать Сообщить модератору
 Re: Капризный тип данных MONEY  [new]
o-o
Guest
Языковые настройки ни при чем, хэлп надо читать:
BOL
Use a period to separate partial monetary units, like cents, from whole monetary units. For example, 2.15 specifies 2 dollars and 15 cents.
Comma separators are not allowed in money or smallmoney constants, although the display format of these data types includes comma separators. You can specify the comma separators only in character strings explicitly cast to money or smallmoney

https://technet.microsoft.com/en-us/library/ms188688(v=sql.105).aspx
20 апр 16, 08:17    [19080433]     Ответить | Цитировать Сообщить модератору
 Re: Капризный тип данных MONEY  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
o-o
Языковые настройки ни при чем, хэлп надо читать:
BOL
Use a period to separate partial monetary units, like cents, from whole monetary units. For example, 2.15 specifies 2 dollars and 15 cents.
Comma separators are not allowed in money or smallmoney constants, although the display format of these data types includes comma separators. You can specify the comma separators only in character strings explicitly cast to money or smallmoney

https://technet.microsoft.com/en-us/library/ms188688(v=sql.105).aspx

точно, сильно рано для ответа было :)
20 апр 16, 09:00    [19080511]     Ответить | Цитировать Сообщить модератору
 Re: Капризный тип данных MONEY  [new]
Glory
Member

Откуда:
Сообщений: 104760
ondorsal
В итоге в новой себестоимости пропадает разделитель разрядов и вместо 1000,952 получается 1000952

Разделитель разрядов есть только в символьном представлении типа данных MONEY
20 апр 16, 09:41    [19080659]     Ответить | Цитировать Сообщить модератору
 Re: Капризный тип данных MONEY  [new]
Glory
Member

Откуда:
Сообщений: 104760
declare @x money
set @x = 1000952
select @x, CONVERT(varchar,@x,1)
20 апр 16, 09:51    [19080686]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить