Есть ли готовая функция для преобразования по культуре числа? - PullRequest
0 голосов
/ 21 февраля 2020

Есть ли готовая функция для преобразования по культуре числа?

  • Французская Франция - 12 345 678,90
  • Испания sh Испания - 12,345,678 , 90
  • Engli sh США - 12 345 678,90
  • Французский канадец - 12 345 678,90
  • Engli sh Канадец - 12 345 678,90
  • Индийский - 1,23,45,678,90

Мне повезло, удалив все символы, и я предполагаю, что первый символ справа является десятичным разделителем, если он содержит 3-й символ или пэд с нулем .00.

Это не работает, если есть более 3 десятичных символов.

1 Ответ

0 голосов
/ 25 февраля 2020

Я нашел встроенную функцию:

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), но работает для меня иначе.

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