( Якщо ви використовуєте 2012 або більш пізню версію SQL Server, будь ласка , см @ wBob в відповідь на більш чистий підхід. Підхід , викладений в моїй обороні нижче тільки потрібно , якщо ви використовуєте SQL Server 2008 R2 або старше. )
Вам не потрібен (або хочете) роздільник тисяч при переході на нього NUMERIC
, незалежно від того, це кома, період чи пробіл, тому просто спочатку позбудьтесь їх. Потім перетворіть кому в крапку / десяткову, і ви закінчите:
SELECT CONVERT(NUMERIC(10, 2),
REPLACE(
REPLACE('7.000,45', '.', ''),
',', '.'
)
) AS [Converted];
Повернення:
7000.45
Для повноти я повинен зазначити, що я також намагався:
SET LANGUAGE Greek;
Дивлячись на різні стилі формату CONVERT , але тут нічого не застосовується.
Функція FORMAT , але тип введення повинен бути числовим або датою / часом / датою часу (це було введено в SQL Server 2012, тому не застосовується для SQL Server 2008 R2 або старішої версії).
І більше нічого, здавалося, не працює. Я сподівався знайти щось більш елегантне, ніж два REPLACE
дзвінки, але поки немає такої удачі.
Крім того, лише кажучи про те, що не є чистим рішенням T-SQL, це також можна досягти за допомогою SQLCLR. І є попередньо виконана функція, яка робить це в бібліотеці SQL # (яку я написав) під назвою String_TryParseToDecimal . Ця функція доступна у безкоштовній версії та працює в кожній версії SQL Server, починаючи з SQL Server 2005:
SELECT SQL#.String_TryParseToDecimal('7.000,45', 'el-GR');
Повернення:
7000.45000000000000000000