sql server:是否可以将1,123转换为数字?
我有一个字段是一个varchar
和字符串存储为"1,223"
或"23,342,234"
sql server:是否可以将1,123转换为数字?
他们有昏迷!
是否可以将它们读取为numbers
?
我不喜欢任何这些答案。在mysql中读取varchar 1,123
并将其转换为数字完全没有问题。
回答:
取决于Windows区域配置设置AFAIK。
回答:
select Cast(Replace(myfield, ",","") as int)
回答:
就什么也没有更换任何逗号和强制转换为一个int:如果您现有的select语句看起来像这样
SELECT CAST(REPLACE(NumberString,',','') as INT)
回答:
:
select field1 from table
你可以用这个来代替转换filed1 to a number:
select cast(replace(field1, ',', '') as int) from table
回答:
只是去掉了逗号,做投:
SELECT CAST(REPLACE('12,345', ',', '') AS DECIMAL(32,2))
回答:
你可以通过钱去的数据类型:
CAST(CAST(value AS MONEY) AS INT)
当铸造VARCHAR到MONEY千位分隔符是allowed。此外,从货币到其它数值类型隐式转换是允许的,所以你也许可以逃脱
CAST(value AS MONEY)
可能是有趣的,看看相对表现,但我很惊讶地看到太大的区别。 但是...可能取决于您的目标数据类型 - 对于通过MONEY进行的整数类型可能会...昂贵。
更新
嗯,这是比我预期更多不同的 - 看到丹尼斯的回答。我想这反映了使用像REPLACE这样的通用函数的成本与更特殊的CAST VARCHAR到MONEY的成本。
回答:
我相信你对这个问题的表现方面都很感兴趣。
强制测试铸造为货币当时的bigint方法。
在一个快速和肮脏的方式填充测试数据:
;with ids as (
select cast(abs(checksum(newid())%1000) as varchar) [1]
,cast(abs(checksum(newid())%1000) as varchar) [2]
,cast(abs(checksum(newid())%1000) as varchar) [3]
union all
select cast(abs(checksum(newid())%1000) as varchar)
,cast(abs(checksum(newid())%1000) as varchar)
,cast(abs(checksum(newid())%1000) as varchar)
from ids
)
, enum as (
select [1]+','+[2]+','+[3] n, row_number() over(order by (select 0)) rn
from ids
where len([1]) = 3 and len([2]) = 3 and len([3]) = 3
)
select rn, n
into temp.[money]
from enum
where rn <= 1000000
option (maxrecursion 0)
现在是时候进行压力测试我们最初的做法,当我们要删除所有从一个字符串逗号:
select min(mn), max(mn), avg(mn) from (
select cast(replace(n,',','') as bigint) mn
from temp.money
) m
完成平均需要10.6秒!
最后,这通过货币方式:
select min(mn), max(mn), avg(mn) from (
select cast(cast(n as money) as bigint) mn
from temp.money
) m
平均需要1.5秒完成!
以上是 sql server:是否可以将1,123转换为数字? 的全部内容, 来源链接: utcz.com/qa/260339.html