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

Откуда:
Сообщений: 46
Есть скрипт который ругается на строку
CAST(REPLACE(cpv.value, ',', '.') AS FLOAT(32))

Msg 8114, Level 16, State 5, Line 1
Error converting data type nvarchar to float.


SELECT c.id,
c.contract_code,
cl.name client_name,
u.first_name+SPACE(1)+u.last_name LO,
p.name product_name,
p.code product_code,
c.[start_date],
CAST(REPLACE(cpv.value, ',', '.') AS FLOAT(32)) collateral_summ,
c.first_installment_date,
c.close_date,
cpr.name collateral_name
FROM dbo.ActiveLoans_MC('2013-02-28', 0, 1, 0, 0, 0) alm2
LEFT JOIN dbo.Contracts c ON c.id=alm2.id
LEFT JOIN dbo.Credit cr on cr.id = c.id
LEFT JOIN dbo.Packages p ON p.id=cr.package_id
LEFT JOIN dbo.Projects j on j.id = c.project_id
LEFT JOIN dbo.Tiers t on t.id = j.tiers_id
LEFT JOIN dbo.Clients cl ON cl.id=t.id
LEFT JOIN dbo.Users u ON u.id=cr.loanofficer_id
LEFT JOIN dbo.CollateralsLinkContracts clc ON clc.contract_id=c.id
LEFT JOIN dbo.CollateralPropertyValues cpv ON cpv.contract_collateral_id=clc.id
LEFT JOIN dbo.CollateralProperties cp ON cp.id=cpv.property_id
LEFT JOIN dbo.CollateralProducts cpr ON cpr.id=cp.product_id
WHERE cp.name='Amount'


Но если убрать
FROM dbo.ActiveLoans_MC('2013-02-28', 0, 1, 0, 0, 0) alm2
то, нормально работает

SELECT c.id,
c.contract_code,
cl.name client_name,
u.first_name+SPACE(1)+u.last_name LO,
p.name product_name,
p.code product_code,
c.[start_date],
CAST(REPLACE(cpv.value, ',', '.') AS FLOAT(32)) collateral_summ,
c.first_installment_date,
c.close_date,
cpr.name collateral_name
FROM Contracts c
LEFT JOIN dbo.Credit cr on cr.id = c.id
LEFT JOIN dbo.Packages p ON p.id=cr.package_id
LEFT JOIN dbo.Projects j on j.id = c.project_id
LEFT JOIN dbo.Tiers t on t.id = j.tiers_id
LEFT JOIN dbo.Clients cl ON cl.id=t.id
LEFT JOIN dbo.Users u ON u.id=cr.loanofficer_id
LEFT JOIN dbo.CollateralsLinkContracts clc ON clc.contract_id=c.id
LEFT JOIN dbo.CollateralPropertyValues cpv ON cpv.contract_collateral_id=clc.id
LEFT JOIN dbo.CollateralProperties cp ON cp.id=cpv.property_id
LEFT JOIN dbo.CollateralProducts cpr ON cpr.id=cp.product_id
WHERE cp.name='Amount'


Не понимаю в чем может быть проблема.
13 мар 14, 12:25    [15716347]     Ответить | Цитировать Сообщить модератору
 Re: Проблема преобразования теста в цифру  [new]
iap
Member

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

что же происходит в dbo.ActiveLoans_MC?
13 мар 14, 12:31    [15716402]     Ответить | Цитировать Сообщить модератору
 Re: Проблема преобразования теста в цифру  [new]
Farhod
Member

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

Выбирает активных клиентов
13 мар 14, 12:31    [15716411]     Ответить | Цитировать Сообщить модератору
 Re: Проблема преобразования теста в цифру  [new]
iap
Member

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

Выбирает активных клиентов
Что-нибудь во что-нибудь конвертирует?
Я к тому, что не вижу, что именно вызывает сообщение об ошибке.

cp.value какие значения содержит?
Они все могут конвертироваться во FLOAT?
13 мар 14, 12:35    [15716449]     Ответить | Цитировать Сообщить модератору
 Re: Проблема преобразования теста в цифру  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Судя по сообщению, тип поля не просто текстовый, а юникодный.
На всякий случай не забывайте букву N перед строковыми литералами
13 мар 14, 12:36    [15716464]     Ответить | Цитировать Сообщить модератору
 Re: Проблема преобразования теста в цифру  [new]
Farhod
Member

Откуда:
Сообщений: 46
iap
Что-нибудь во что-нибудь конвертирует?
Я к тому, что не вижу, что именно вызывает сообщение об ошибке.


cp.value какие значения содержит?
Они все могут конвертироваться во FLOAT?

Да конвертирует, и довольно сложная функция.
Да там только цифры.
13 мар 14, 12:40    [15716519]     Ответить | Цитировать Сообщить модератору
 Re: Проблема преобразования теста в цифру  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Farhod
iap
Что-нибудь во что-нибудь конвертирует?
Я к тому, что не вижу, что именно вызывает сообщение об ошибке.


cp.value какие значения содержит?
Они все могут конвертироваться во FLOAT?

Да конвертирует, и довольно сложная функция.
Да там только цифры.
Может, ошибка-то в функции?
13 мар 14, 12:45    [15716580]     Ответить | Цитировать Сообщить модератору
 Re: Проблема преобразования теста в цифру  [new]
Farhod
Member

Откуда:
Сообщений: 46
iap
Судя по сообщению, тип поля не просто текстовый, а юникодный.
На всякий случай не забывайте букву N перед строковыми литералами

Нет такая же проблема.
13 мар 14, 12:45    [15716592]     Ответить | Цитировать Сообщить модератору
 Re: Проблема преобразования теста в цифру  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Farhod
Да там только цифры.
Где? В cp.value? А REPLACE тогда зачем?
13 мар 14, 12:46    [15716605]     Ответить | Цитировать Сообщить модератору
 Re: Проблема преобразования теста в цифру  [new]
Farhod
Member

Откуда:
Сообщений: 46
iap
Farhod
Да там только цифры.
Где? В cp.value? А REPLACE тогда зачем?

На всякий случай, в общем он не нужен
13 мар 14, 12:48    [15716622]     Ответить | Цитировать Сообщить модератору
 Re: Проблема преобразования теста в цифру  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
isnumeric() для начала.
13 мар 14, 13:18    [15716917]     Ответить | Цитировать Сообщить модератору
 Re: Проблема преобразования теста в цифру  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Владислав Колосов
isnumeric() для начала.
Для начала - текст функции в студию!
13 мар 14, 13:22    [15716944]     Ответить | Цитировать Сообщить модератору
 Re: Проблема преобразования теста в цифру  [new]
Farhod
Member

Откуда:
Сообщений: 46
Владислав Колосов
isnumeric() для начала.

Через isnumeric() проверял, все 1.
13 мар 14, 13:31    [15717046]     Ответить | Цитировать Сообщить модератору
 Re: Проблема преобразования теста в цифру  [new]
o-o
Guest
так вроде ТС пишет, ошибка вот в этой строке:
значит в REPLACE(cpv.value, ',', '.') имеется неконвертируемое, не?

Farhod
Есть скрипт который ругается на строку
CAST(REPLACE(cpv.value, ',', '.') AS FLOAT(32))

Msg 8114, Level 16, State 5, Line 1
Error converting data type nvarchar to float.


Не понимаю в чем может быть проблема.


и isnumeric() может совсем даже не проканать:
declare @t table(c nvarchar(10))
insert into @t values
('123,456.0')

select c, ISNUMERIC(c)
from @t
-----------------
123,456.0	1


declare @t table(c nvarchar(10))
insert into @t values
('123,456.0')

select CAST(REPLACE(c, ',', '.') AS FLOAT(32))
from @t
-----------------
Msg 8114, Level 16, State 5, Line 5
Error converting data type nvarchar to float.


может, отловить строки, где и точка имеется, и запятая?
откуда-то же растут ноги у REPLACE-а
13 мар 14, 13:40    [15717130]     Ответить | Цитировать Сообщить модератору
 Re: Проблема преобразования теста в цифру  [new]
o-o
Guest
Farhod
Владислав Колосов
isnumeric() для начала.

Через isnumeric() проверял, все 1.

a проверить isnumeric()-ом сам REPLACE(cpv.value, ',', '.')?
13 мар 14, 13:42    [15717163]     Ответить | Цитировать Сообщить модератору
 Re: Проблема преобразования теста в цифру  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
o-o
так вроде ТС пишет, ошибка вот в этой строке:
значит в REPLACE(cpv.value, ',', '.') имеется неконвертируемое, не?

Farhod
Есть скрипт который ругается на строку
CAST(REPLACE(cpv.value, ',', '.') AS FLOAT(32))


Msg 8114, Level 16, State 5, Line 1
Error converting data type nvarchar to float.


Не понимаю в чем может быть проблема.


и isnumeric() может совсем даже не проканать:
declare @t table(c nvarchar(10))
insert into @t values
('123,456.0')

select c, ISNUMERIC(c)
from @t
-----------------
123,456.0	1


declare @t table(c nvarchar(10))
insert into @t values
('123,456.0')

select CAST(REPLACE(c, ',', '.') AS FLOAT(32))
from @t
-----------------
Msg 8114, Level 16, State 5, Line 5
Error converting data type nvarchar to float.



может, отловить строки, где и точка имеется, и запятая?
откуда-то же растут ноги у REPLACE-а
Прочитайте все сообщения.
Они короткие.
В указанных строках - только цифры, говорит
А в функции - конвертирование
13 мар 14, 13:43    [15717173]     Ответить | Цитировать Сообщить модератору
 Re: Проблема преобразования теста в цифру  [new]
Farhod
Member

Откуда:
Сообщений: 46
o-o,

Проблема в том что, если уберу строку
FROM dbo.ActiveLoans_MC('2013-02-28', 0, 1, 0, 0, 0) alm2
то все нормально работает.
13 мар 14, 13:45    [15717200]     Ответить | Цитировать Сообщить модератору
 Re: Проблема преобразования теста в цифру  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Запрос
select * FROM dbo.ActiveLoans_MC('2013-02-28', 0, 1, 0, 0, 0) alm2

также не создает ошибку?
13 мар 14, 13:49    [15717261]     Ответить | Цитировать Сообщить модератору
 Re: Проблема преобразования теста в цифру  [new]
Farhod
Member

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

Так все нормально, это основная функция которая везде используется.
13 мар 14, 14:11    [15717531]     Ответить | Цитировать Сообщить модератору
 Re: Проблема преобразования теста в цифру  [new]
o-o
Guest
iap,

вот что у меня не сходится:
создаю глючно-конвертирующую инлайн ф-цию и к ней первой присоединяю другие таблицы.
выдается эта самая ошибка конвертирования,
но она указывает не на строку, где поле из глючной функции,
студия мне выдает ошибку в вообще первой строке SELECT-а.
т.е. я меняю как угодно порядок полей в выборке (каждое поле в своей новой строке),
но ошибка все время в "первой" строке.
а у ТС почему-то в 8-ой: CAST(REPLACE(cpv.value, ',', '.') AS FLOAT(32))
(хотя это с его слов, написано-то в "первой" в самой ошибке)
меня сие запутало :)

так что да, никому верить нельзя, ошибка должна быть в dbo.ActiveLoans_MC('2013-02-28', 0, 1, 0, 0, 0),
но в связи с
Farhod
Владислав Колосов
Запрос
select * FROM dbo.ActiveLoans_MC('2013-02-28', 0, 1, 0, 0, 0) alm2

также не создает ошибку?

Так все нормально, это основная функция которая везде используется.

у меня идей больше нет
13 мар 14, 14:28    [15717730]     Ответить | Цитировать Сообщить модератору
 Re: Проблема преобразования теста в цифру  [new]
iap
Member

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

я думаю, что весь SELECT - это одна строка для парсера
13 мар 14, 14:34    [15717781]     Ответить | Цитировать Сообщить модератору
 Re: Проблема преобразования теста в цифру  [new]
o-o
Guest
iap,

да.
+ если даже из самой ф-ции ничего в SELECT-е не выводить (как у ТС),
все равно ошибку будет указывать в первой строке селекта.
(но это скорее только к тому, что не всему надо верить "на слово")
+ непонятно, почему бы ф-цию сюда не вывесить.
13 мар 14, 14:40    [15717840]     Ответить | Цитировать Сообщить модератору
 Re: Проблема преобразования теста в цифру  [new]
Farhod
Member

Откуда:
Сообщений: 46
Всем спасибо за ответы, проблема решилась, но я так и не понял в чем проблема.
При изменения строки на
CAST(REPLACE((SELECT value FROM CollateralPropertyValues WHERE id=cpv.id), ',', '.') AS MONEY)
заработал, тут идет вызов той же таблицы заново.
16 мар 14, 23:04    [15734830]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить