首页 > 解决方案 > 是否有开箱即用的功能来按文化转换数字?

问题描述

是否有开箱即用的功能来按文化转换数字?

我很幸运地删除了所有字符,并假设右边的第一个字符是小数点分隔符,如果它与第三个字符或 0.00 填充。

如果有超过 3 个十进制字符,这将不起作用。

标签: tsql

解决方案


我找到了内置函数:

TRY_PARSE(字符串值作为数据类型使用文化)

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),但它对我有用。


推荐阅读