使用逗号分隔符将nVarChar转换/转换为十进制

Set*_*thO 7 t-sql casting

我支持将平面文件输入转换为SqlServer数据库表的ETL过程.代码几乎是100%T-SQL并在数据库中运行.我没有代码,也无法更改工作流程.我只能帮助配置获取文件数据并将其转换为表数据的"转换"SQL(稍后将详细介绍).

现在免责声明已经不在了......

我们的一个文件提供商最近更改了它们代表货币金额的'12345.67'方式'12,345.67'.我们转换值的SQL看起来像SELECT FLOOR( CAST([inputValue] AS DECIMAL(24,10)))不再有效.即,逗号打破演员.

鉴于我必须将最终值存储为Decimal (24,10)数据类型(是的,我意识到FLOOR消除了所有小数点后的精度 - 设计师与客户不同步),我该怎么做才能有效地转换这个字符串?

谢谢你的想法.

KM.*_*KM. 8

尝试使用REPLACE(Transact-SQL):

SELECT REPLACE('12,345.67',',','')
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

12345.67
Run Code Online (Sandbox Code Playgroud)

所以它会是:

SELECT FLOOR( CAST(REPLACE([input value],',','') AS DECIMAL(24,10)))
Run Code Online (Sandbox Code Playgroud)