SQLServer 2005 - изменение символа в NVarChar

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

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

@VALUE1 NVARCHAR(100)

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

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

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

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

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

3 ответа

Решение

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

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

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

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

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

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

Другие вопросы по тегам