Локализация для CONVERT - PullRequest
       1

Локализация для CONVERT

1 голос
/ 02 февраля 2012

Мне нужно объединить две таблицы на основе столбцов с разными типами. Первый столбец - nvarchar(50), а второй - типа float. Столбец nvarchar содержит строковое представление значения с плавающей точкой, но записано в немецкой локализации, что означает, что запятая используется как десятичный разделитель.

Пример. Число с плавающей запятой 26.1 в столбце nvarchar представлено как 26,1.

Я пытался JOIN ... ON firstcolumn = CONVERT(NVARCHAR(50), secondcolumn), который работает для всех чисел без дроби. Столбцы с дробью переводятся в «26,1», что явно не соответствует «26,1».

Использование SET LANGUAGE German не сработало.

Есть ли способ использовать немецкую локализацию для оператора CONVERT, чтобы вместо запятой использовалась запятая? Или мне нужно использовать REPLACE для решения проблемы?

1 Ответ

2 голосов
/ 02 февраля 2012

Вам необходимо использовать REPLACE как

firstcolumn = CAST(REPLACE(secondcolumn, ',', '.') as float)

НО Будьте очень осторожны при сравнении типов с плавающей точкой, иногда лучше использовать эту конструкцию:

ABS(firstcolumn - CAST(REPLACE(secondcolumn, ',', '.') as float)) < @epsilon

где @epsilon - допустимая ошибка, скажем = 0,001

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...