Я нашел встроенную функцию:
TRY_PARSE (string_value AS data_type USING культура)
https://docs.microsoft.com/en-us/sql/t-sql/functions/try-parse-transact-sql
CREATE TABLE db_tbl ( culture VARCHAR(50), string VARCHAR(50), number NUMERIC(18,9) );
INSERT INTO db_tbl VALUES
('fr-FR', '12 345 678,90', 12345678.90),
('es-ES', '12.345.678,90', 12345678.90),
('fr-FR', '12 345 678', 12345678),
('en-US', '12,345,678.90', 12345678.90),
('fr-CA', '12 345 678,90', 12345678.90),
('en-CA', '12 345 678.90', 12345678.90),
('fr-FR', '12 345 678,900', 12345678.90),
('en-US', '12,345,678.900', 12345678.90),
('en-US', '12,345,678', 12345678),
('en-US', '345,678', 345678),
('fr-FR', '345,678', 345.678),
('bn-BN', '1,23,45,678.90', 12345678.90)
;
SELECT culture
, TRY_PARSE(string AS MONEY USING culture)
, number
FROM db_tbl;
http://sqlfiddle.com/#! 18 / 11963f / 1
См. Документы Microsoft, он не поддерживает все культуры (например, en-CA), но работает для меня иначе.