Преобразование типов данных(nvchar->real)

Cosmosila
Дата: 25.02.2013 12:37:50
Добрый день!
Совсем недавно столкнулся с SQL Server.
Возникла следующая проблема:
Мое ПО пишет в базу данных SQL значения "0,2" типа nvarchar. Мне необходимо преобразовать данные значение в тип real для того что бы работал математический фильтр данного по. Стандартное изменение типа данных по столбцу выдает ошибку "Ошибка при преобразовании типа данных nvarchar к real." Возможно ли решить данную проблему через функцию convert? Какие еще есть решение данной проблемы?
Заранее спасибо!
Glory
Дата: 25.02.2013 12:39:03
Cosmosila
Возможно ли решить данную проблему через функцию convert? Какие еще есть решение данной проблемы?

десятичным разделителем в TSQL является точка и только точка.
Гость333
Дата: 25.02.2013 12:43:46
Cosmosila
Мое ПО пишет в базу данных SQL значения "0,2" типа nvarchar.

А не проще ли сразу писать в БД с типом real, без необходимости дальнейших преобразований?..
Cosmosila
Дата: 25.02.2013 13:08:24
Мое ПО синхронизирует данные с модуля "А" в модуль "Б". Модуль "А" имеет свою базу данных, также он отображает все дробные значение через точку, к примеру "0.2" типом real. Модуль Б работает на базе SQL Server, но не принимает при синхронизации дробные значения через точку модуля A. Модуль "Б" принимает значения только через запятую к примеру "0,2" типом real.
По причине закрытого кода данных модулей решил попробовать обходной путь:
1) В модуле А все дробные значения делаю типом string, к примеру "0,2"
2) После синхронизации в модуле Б дробные значения становятся типом nvarchar в базе SQL
3) Преобразовать на SQL Server дробные значения,к примеру "0,2", типом nvarchar в тип real.
Гость333
Дата: 25.02.2013 13:18:16
Cosmosila
Модуль "А" имеет свою базу данных, также он отображает все дробные значение через точку, к примеру "0.2" типом real. Модуль Б работает на базе SQL Server, но не принимает при синхронизации дробные значения через точку модуля A. Модуль "Б" принимает значения только через запятую к примеру "0,2" типом real.

То есть эти модули не умеют выдавать данные непосредственно с типом real, а только в текстовом виде?
Вообще похоже на различие региональных настроек у учёток, под которыми работают модуль А и модуль Б.
Cosmosila
Дата: 25.02.2013 13:27:38
Гость333
Cosmosila
Модуль "А" имеет свою базу данных, также он отображает все дробные значение через точку, к примеру "0.2" типом real. Модуль Б работает на базе SQL Server, но не принимает при синхронизации дробные значения через точку модуля A. Модуль "Б" принимает значения только через запятую к примеру "0,2" типом real.

То есть эти модули не умеют выдавать данные непосредственно с типом real, а только в текстовом виде?
Вообще похоже на различие региональных настроек у учёток, под которыми работают модуль А и модуль Б.


Модуль А использует свою программную среду и базу данных, в нем данные типа real работают корректно. Но при передачи єтих данных в модуль Б на базе SQL єти данные становятся текстовыми. Для преобразования их в математические я меняю им на SQL Server тип с nvarchar на real. При целых значениях данный способ помогает, а при дробных выдает ошибку.
Cosmosila
Дата: 25.02.2013 13:29:07
Cosmosila
Гость333
пропущено...

То есть эти модули не умеют выдавать данные непосредственно с типом real, а только в текстовом виде?
Вообще похоже на различие региональных настроек у учёток, под которыми работают модуль А и модуль Б.


Модуль А использует свою программную среду и базу данных, в нем данные типа real работают корректно. Но при передачи єтих данных в модуль Б на базе SQL єти данные становятся текстовыми. Для преобразования их в математические я меняю им на SQL Server тип с nvarchar на real. При целых значениях данный способ помогает, а при дробных выдает ошибку.


В интерфейсе модуля Б, дробные значения типа real можно задать только через запятую.
Glory
Дата: 25.02.2013 13:31:07
Cosmosila
В интерфейсе модуля Б, дробные значения типа real можно задать только через запятую.

Потому что в региональных настройках запятая задана в качестве десятичного разделитеоля ?
Cosmosila
Дата: 25.02.2013 13:39:35
Glory
Cosmosila
В интерфейсе модуля Б, дробные значения типа real можно задать только через запятую.

Потому что в региональных настройках запятая задана в качестве десятичного разделитеоля ?


В модуле Б отсутствую региональные настройки, по стандарту все дробные значения идут с запятой...
Glory
Дата: 25.02.2013 13:40:35
Cosmosila
В модуле Б отсутствую региональные настройки,

Региональные настройки присутствуют у Windows. Причем могут быть разными у разных учетных записей.