Преобразование типов в MSSQL
От: A_l_e_x_e_y Россия  
Дата: 21.04.05 16:51
Оценка:
Столкнулся со странной проблемой.
Есть две таблицы.

Классификатор
Код int
Иерархия nvarchar

Данные
Код объекта int
Код атрибута int // Соответствует Классификатор.Код
Значение nvarchar

В таблице данные в поле Значение в виде строчки хранятся разные вещи(числа, строки, даты). Есть некоторое количество записей, в поле Значение которых хранятся целые числа.
Если выбирать их запросом
 SELECT CONVERT(int, [Значение]) FROM [Данные] WHERE ....

то все в порядке.
Но если немного усложнить запрос
 SELECT SUM(CONVERT(int, [Значение])) FROM [Данные] WHERE ....

То это не выполняется. Пишет, что
Syntax error converting the nvarchar value '0.0503' to a column of data type int.

При этом значение 0.0503 в таблице действительно есть, но появляться оно не должно.
Как можно с этим справиться?
... << RSDN@Home 1.1.4 beta 5 rev. 0>>
Re: Преобразование типов в MSSQL
От: Chupa_Kabra  
Дата: 22.04.05 03:06
Оценка: +1
Здравствуйте, A_l_e_x_e_y, Вы писали:

A__>Столкнулся со странной проблемой.

A__>Есть две таблицы.

A__>Классификатор

A__>Код int
A__>Иерархия nvarchar

A__>Данные

A__>Код объекта int
A__>Код атрибута int // Соответствует Классификатор.Код
A__>Значение nvarchar

A__>В таблице данные в поле Значение в виде строчки хранятся разные вещи(числа, строки, даты). Есть некоторое количество записей, в поле Значение которых хранятся целые числа.

A__>Если выбирать их запросом
A__>
A__> SELECT CONVERT(int, [Значение]) FROM [Данные] WHERE ....
A__>

A__>то все в порядке.
A__>Но если немного усложнить запрос
A__>
A__> SELECT SUM(CONVERT(int, [Значение])) FROM [Данные] WHERE ....
A__>

A__>То это не выполняется. Пишет, что
A__>
A__>Syntax error converting the nvarchar value '0.0503' to a column of data type int.
A__>

A__>При этом значение 0.0503 в таблице действительно есть, но появляться оно не должно.
A__>Как можно с этим справиться?

А точно у вас в обоих случаях условия одинаковые ?
Все хотят хорошо провести время, но время не проведешь !
Re[2]: Преобразование типов в MSSQL
От: A_l_e_x_e_y Россия  
Дата: 22.04.05 07:44
Оценка:
Здравствуйте, Chupa_Kabra, Вы писали:
C_K>А точно у вас в обоих случаях условия одинаковые ?

Точно. Все что я делаю, это дописываю SUM. Остальная часть запроса остается той же самой.
... << RSDN@Home 1.1.4 beta 5 rev. 0>>
Re[3]: Преобразование типов в MSSQL
От: Chupa_Kabra  
Дата: 22.04.05 08:04
Оценка:
Здравствуйте, A_l_e_x_e_y, Вы писали:

A__>Здравствуйте, Chupa_Kabra, Вы писали:

C_K>>А точно у вас в обоих случаях условия одинаковые ?

A__>Точно. Все что я делаю, это дописываю SUM. Остальная часть запроса остается той же самой.

Очень странно.
А вот так работает ?

select sum([Значение]) from (SELECT CONVERT(int, [Значение]) [Значение] FROM [Данные] WHERE ....) z
Все хотят хорошо провести время, но время не проведешь !
Re[4]: Преобразование типов в MSSQL
От: A_l_e_x_e_y Россия  
Дата: 22.04.05 08:09
Оценка: -1
Здравствуйте, Chupa_Kabra, Вы писали:
C_K>
C_K>select sum([Значение]) from (SELECT CONVERT(int, [Значение]) [Значение] FROM [Данные] WHERE ....) z
C_K>

К сожалению MSSQL2000 так не умеет
... << RSDN@Home 1.1.4 beta 5 rev. 0>>
Re[5]: Преобразование типов в MSSQL
От: Chupa_Kabra  
Дата: 22.04.05 08:15
Оценка:
Здравствуйте, A_l_e_x_e_y, Вы писали:

A__>Здравствуйте, Chupa_Kabra, Вы писали:

C_K>>
C_K>>select sum([Значение]) from (SELECT CONVERT(int, [Значение]) [Значение] FROM [Данные] WHERE ....) z
C_K>>

A__>К сожалению MSSQL2000 так не умеет
Здрасти приплыли ...
Может вам BOL для начала почитать ?
Все хотят хорошо провести время, но время не проведешь !
Re[6]: Преобразование типов в MSSQL
От: A_l_e_x_e_y Россия  
Дата: 22.04.05 08:41
Оценка:
Здравствуйте, Chupa_Kabra, Вы писали:
A__>>К сожалению MSSQL2000 так не умеет
C_K>Здрасти приплыли ...
C_K>Может вам BOL для начала почитать ?
Я бы почитал, но нету . С инета слить я его не могу.

В том виде, в котором вы предложили попробовать запрос не работает. На него ругается парсер SQL Query аналяйзера. Можно конечно сделать через временную таблицу, но мне такой подход не нравится.
... << RSDN@Home 1.1.4 beta 5 rev. 0>>
Re[7]: Преобразование типов в MSSQL
От: Chupa_Kabra  
Дата: 22.04.05 08:43
Оценка: +1
Здравствуйте, A_l_e_x_e_y, Вы писали:

A__>Здравствуйте, Chupa_Kabra, Вы писали:

A__>>>К сожалению MSSQL2000 так не умеет
C_K>>Здрасти приплыли ...
C_K>>Может вам BOL для начала почитать ?
A__>Я бы почитал, но нету . С инета слить я его не могу.

A__>В том виде, в котором вы предложили попробовать запрос не работает. На него ругается парсер SQL Query аналяйзера. Можно конечно сделать через временную таблицу, но мне такой подход не нравится.

Я не предлагаю вам так оставлять, я предлагаю попробовать, что бы идентифицировать проблему.
Напишите полностью запрос и текст ошибки
Все хотят хорошо провести время, но время не проведешь !
Re: Преобразование типов в MSSQL
От: B0rG  
Дата: 22.04.05 09:42
Оценка:
Бывает ему крышу сносит...
Попробуйте сделать вьюху с конвертацией и по ней считать уже SUM. Может поможет.
Re[7]: Преобразование типов в MSSQL
От: B0rG  
Дата: 22.04.05 09:45
Оценка:
C_K>>Может вам BOL для начала почитать ?
A__>Я бы почитал, но нету . С инета слить я его не могу.

хммм... инета нету?
http://www.microsoft.com/sql/techinfo/productdoc/2000/books.asp
Re[8]: Преобразование типов в MSSQL
От: A_l_e_x_e_y Россия  
Дата: 22.04.05 09:50
Оценка:
Здравствуйте, B0rG, Вы писали:
BG>хммм... инета нету?
BG>http://www.microsoft.com/sql/techinfo/productdoc/2000/books.asp
Инет есть. Ссылку на файл я нашёл. НО размер файла 34мб. А через нашё проксю проходят файлы размером не более 20мб.
... << RSDN@Home 1.1.4 beta 5 rev. 0>>
Re[8]: Преобразование типов в MSSQL
От: A_l_e_x_e_y Россия  
Дата: 22.04.05 10:02
Оценка:
Здравствуйте, Chupa_Kabra, Вы писали:
К сожалению тот вариант условия where, который я раньше использовал, я потерял.
Но есть новый запрос

SELECT * 
FROM [Объекты НПО] 
WHERE  [Объекты НПО].[Код] = 30 OR
[Объекты НПО].[Код] IN
(SELECT CONVERT(int, [Значение]) FROM [Данные]
WHERE [Код объекта] = 30 AND [Код атрибута] IN (SELECT [Код] FROM [Классификатор] WHERE [Иерархия] LIKE '0202__01'))


Он выполняется нормально, если нет условия [Объекты НПО].[Код] = 30.
Если оно есть, то
Server: Msg 245, Level 16, State 1, Line 1
Syntax error converting the nvarchar value '427.5' to a column of data type int.
... << RSDN@Home 1.1.4 beta 5 rev. 0>>
Re[9]: Преобразование типов в MSSQL
От: B0rG  
Дата: 22.04.05 10:04
Оценка:
BG>>хммм... инета нету?
BG>>http://www.microsoft.com/sql/techinfo/productdoc/2000/books.asp
A__>Инет есть. Ссылку на файл я нашёл. НО размер файла 34мб. А через нашё проксю проходят файлы размером не более 20мб.

Не понимаю проблемы — сходите к начальству, скажите для работы необходимо — потому как действительно необходимо, пускай давит на админов.
Re[9]: Преобразование типов в MSSQL
От: Chupa_Kabra  
Дата: 22.04.05 10:15
Оценка:
Здравствуйте, A_l_e_x_e_y, Вы писали:

A__>Здравствуйте, Chupa_Kabra, Вы писали:

A__>К сожалению тот вариант условия where, который я раньше использовал, я потерял.
A__>Но есть новый запрос

A__>
A__>SELECT * 
A__>FROM [Объекты НПО] 
A__>WHERE  [Объекты НПО].[Код] = 30 OR
A__>[Объекты НПО].[Код] IN
A__>(SELECT CONVERT(int, [Значение]) FROM [Данные]
A__>WHERE [Код объекта] = 30 AND [Код атрибута] IN (SELECT [Код] FROM [Классификатор] WHERE [Иерархия] LIKE '0202__01'))
A__>


A__>Он выполняется нормально, если нет условия [Объекты НПО].[Код] = 30.

A__>Если оно есть, то
A__>
A__>Server: Msg 245, Level 16, State 1, Line 1
A__>Syntax error converting the nvarchar value '427.5' to a column of data type int.
A__>

Что то не нравится мне ваш запрос, если [Объекты НПО].[Код] — у вас строка, то вам лучше строкой и сравнивать
Почему у вас типы полей разные ?
Все хотят хорошо провести время, но время не проведешь !
Re: Преобразование типов в MSSQL
От: AntoxaM  
Дата: 22.04.05 10:29
Оценка:
Здравствуйте, A_l_e_x_e_y, Вы писали:

A__>Столкнулся со странной проблемой.

A__>...
A__>
A__>Syntax error converting the nvarchar value '0.0503' to a column of data type int.
A__>

A__>При этом значение 0.0503 в таблице действительно есть, но появляться оно не должно.
A__>Как можно с этим справиться?
а так:
SELECT SUM(CONVERT(int,CONVERT(numeric, [Значение])))...
Re[9]: Преобразование типов в MSSQL
От: Sinclair Россия https://github.com/evilguest/
Дата: 22.04.05 10:38
Оценка:
Здравствуйте, A_l_e_x_e_y, Вы писали:
SELECT * FROM [Объекты НПО]  WHERE  [Объекты НПО].[Код] = 30

что возвращает?
... << RSDN@Home 1.1.4 beta 5 rev. 395>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[9]: Преобразование типов в MSSQL
От: Chupa_Kabra  
Дата: 22.04.05 10:40
Оценка:
Здравствуйте, A_l_e_x_e_y, Вы писали:

A__>Здравствуйте, Chupa_Kabra, Вы писали:

A__>К сожалению тот вариант условия where, который я раньше использовал, я потерял.
A__>Но есть новый запрос

A__>
A__>SELECT * 
A__>FROM [Объекты НПО] 
A__>WHERE  [Объекты НПО].[Код] = 30 OR
A__>[Объекты НПО].[Код] IN
A__>(SELECT CONVERT(int, [Значение]) FROM [Данные]
A__>WHERE [Код объекта] = 30 AND [Код атрибута] IN (SELECT [Код] FROM [Классификатор] WHERE [Иерархия] LIKE '0202__01'))
A__>


A__>Он выполняется нормально, если нет условия [Объекты НПО].[Код] = 30.

A__>Если оно есть, то
A__>
A__>Server: Msg 245, Level 16, State 1, Line 1
A__>Syntax error converting the nvarchar value '427.5' to a column of data type int.
A__>

Структуру таблиц в студию
Все хотят хорошо провести время, но время не проведешь !
Re[10]: Преобразование типов в MSSQL
От: A_l_e_x_e_y Россия  
Дата: 22.04.05 11:00
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, A_l_e_x_e_y, Вы писали:

S>
S>SELECT * FROM [Объекты НПО]  WHERE  [Объекты НПО].[Код] = 30 
S>

S>что возвращает?

То, что и должно быть. Все значения правильные.
... << RSDN@Home 1.1.4 beta 5 rev. 0>>
Re[10]: Преобразование типов в MSSQL
От: A_l_e_x_e_y Россия  
Дата: 22.04.05 11:05
Оценка:
Здравствуйте, Chupa_Kabra, Вы писали:
C_K>Структуру таблиц в студию
Я опущу поля, которые не участвуют в запросе.

Классификатор
Код int
Иерархия nvarchar

Объекты НПО
Код int
Название nvarchar

Данные
Код int
Код атрибута int //свяано c Классификатор.Код
Код объекта int //связано с [Объекты НПО].[Код]
Значение nvarchar
... << RSDN@Home 1.1.4 beta 5 rev. 0>>
Re[10]: Преобразование типов в MSSQL
От: A_l_e_x_e_y Россия  
Дата: 22.04.05 11:05
Оценка:
Здравствуйте, B0rG, Вы писали:
BG>Не понимаю проблемы — сходите к начальству, скажите для работы необходимо — потому как действительно необходимо, пускай давит на админов.
Желание слить врозникло только сегодня. Так что схожу.
... << RSDN@Home 1.1.4 beta 5 rev. 0>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.