使用不同的文化格式将VarChar转换为Float

时间:2017-10-19 08:49:57

标签: sql sql-server casting culture dataformat

从不同的外部来源,我得到一些数据在NVarChar字段中的数据。到目前为止,我使用了一个带有CAST的REPLACE来确保数字带有","在哪里施放正确的方式。像这样:

<property>
   <name>mapreduce.job.queuename</name>
   <value>interactive.hive_queue</value>
</property>

这个工作得很好,但现在我得到的数据中还有一千个分隔符。就像这样:

select cast(replace('12,5',',','.') as float)
select cast(replace('12.5',',','.') as float)

它&#39;破碎。 有没有办法检测带有数字的NVarChar中使用的数据格式?

我尝试将TRY_PARSE与culture参数一起使用,如果有一千个分隔符但不是没有,它会很好用:

select cast(replace('2.012,5',',','.') as float)
select cast(replace('2,012.5',',','.') as float)

问题是我必须在UPDATE中使用它,并且数据格式可以在同一个表中有所不同。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

您可以使用CHARINDEX()计算出分隔符的位置以及它们在字符串中的位置以及CASE表达式,以便在REPLACE和{{1}之前处理不同的情况} CAST

FLOAT

<强>参考文献:

CHARINDEX (Transact-SQL)

  

在表达式中搜索另一个表达式,并在找到时返回其起始位置。