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. Он дал вам решение, которое решает вашу проблему на данный момент, но, как он указал, вы можете столкнуться с некоторыми проблемами в будущем.
Я предполагаю, что процедура вызывается некоторым кодом приложения, и я подозреваю, что эти числа являются пользовательским вводом. Если это так, то преобразование должно происходить на уровне приложения, так как это позаботится о настройках языкового стандарта, и это единственное место, которое контролирует формат пользовательского ввода.