SQLServer 2005 - изменение символа в NVarChar - PullRequest
1 голос
/ 20 ноября 2008

Я получаю несколько аргументов в хранимую процедуру. Эти аргументы являются NVARCHAR.

У меня проблема, когда мне нужно привести некоторые из этих значений к FLOATS, потому что они принимаются как, например,

@ VALUE1 NVARCHAR (100)

ОБЪЯВИТЬ @ChangedValue SET @ChangedValue = CAST (@ Value1 AS FLOAT)

например. @ Value1 = "0,001"

Дает мне проблему, так как ожидает "0,001"

Я не могу изменить формат ввода, но могу ли я как-то изменить его на стороне SQL-сервера? Изменяя все "," на "." вместо этого?

С наилучшими пожеланиями, Кенн

Ответы [ 3 ]

3 голосов
/ 20 ноября 2008

Вы можете использовать @VALUE1 = REPLACE(@VALUE1, ',', '.')

Это действительно ужасно!

0 голосов
/ 20 ноября 2008

Я не знаком с вашими данными, но убедитесь, что у вас нет значений, которые действительны с запятой, такой как 1000. Изменение этого значения на 1.000 с использованием замены приводит к резкому изменению фактического числа.

Я бы исправил пользовательский интерфейс, чтобы в поле нельзя было вводить недопустимые номера. Я также наложил бы ограничение на таблицу в базе данных, которая требует, чтобы число находилось в определенном диапазоне или действительное число после очистки данных. Таким образом, плохие данные не могут попасть в поле с самого начала.

0 голосов
/ 20 ноября 2008

Как сказал Митч, это звучит не так хорошо, и было бы намного лучше, если бы предоставленный параметр имел тип float. Он дал вам решение, которое решает вашу проблему на данный момент, но, как он указал, вы можете столкнуться с некоторыми проблемами в будущем.

Я предполагаю, что процедура вызывается некоторым кодом приложения, и я подозреваю, что эти числа являются пользовательским вводом. Если это так, то преобразование должно происходить на уровне приложения, так как это позаботится о настройках локали, и это единственное место, которое контролирует формат ввода пользователя.

...