tsql - 是否有开箱即用的功能来按文化转换数字?
问题描述
是否有开箱即用的功能来按文化转换数字?
- 法国 法国 12 345 678,90
- 西班牙 西班牙是 12.345.678,90
- 英语美国是 12,345,678.90
- 法裔加拿大人是 12 345 678,90
- 加拿大英语是 12 345 678.90
- 印度人是 1,23,45,678.90
我很幸运地删除了所有字符,并假设右边的第一个字符是小数点分隔符,如果它与第三个字符或 0.00 填充。
如果有超过 3 个十进制字符,这将不起作用。
解决方案
我找到了内置函数:
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),但它对我有用。
推荐阅读
- ios - Xamarin.Forms iOS 故事板未显示,即使在 Info.plist 文件中构建和设置后也是如此
- javafx - JavaFX 中的磨砂玻璃剪裁
- android - 为什么 android API:getNotificationPolicy 无法在某些具有特定 sdk 版本的模拟器上成功运行?
- python - 如何使用 plotly-express 组合两个数据框并将数据绘制为一条线
- html - 如何对齐这些 HREF 按钮?
- git - Gitkraken 说 repo 是私有的,但它是公开的
- python - 利用 QFrame 中的特定事件
- javascript - JavaScript switch 中的同时条件
- machine-learning - LSTM 中的 return_sequences
- apache-spark - 用 reducebykey 替换 group by