将varchar转换为十进制

时间:2018-12-03 09:23:51

标签: sql-server tsql data-conversion

如何将下面左侧的值变成括号中的值? (SQL Server 2012)

50    (000.050)
100   (000.100)
1000  (001.000)
9999  (009.999)
20000 (020.000)

1 个答案:

答案 0 :(得分:2)

这似乎很容易...您尝试了什么?

首先:如果这些值是(整数)数字,则不应将它们存储在字符串列中。如果其中包含非数字值,那么任何代码都可能轻易中断...

您可以尝试以下方法:

DECLARE @mockup TABLE(ID INT IDENTITY,YourValue VARCHAR(100))
INSERT INTO @mockup VALUES('50'),('100'),('1000'),('9999'),('20000');

SELECT *
      ,CAST(YourValue AS DECIMAL(10,3))/1000 AS NewValue
      ,FORMAT(CAST(YourValue AS DECIMAL(10,3))/1000,'000.000') AS Formatted
FROM @mockup 

将类似"1000"的字符串投射到DECIMAL将会得到一个数字。该数字可以除以1000得到所需的值。

如果需要所提供的格式,则可以在SQL Server 2012+上使用FORMAT(),但是此功能相当慢...如果这对您很重要,请搜索其他格式设置方法一个号码。 SO上有很多示例...