Sql server 将varchar转换为十进制

Sql server 将varchar转换为十进制,sql-server,tsql,data-conversion,Sql Server,Tsql,Data Conversion,如何将下面左侧的值转换为括号中的值?(SQL Server 2012) 这似乎很容易。。。你自己试过什么 首先:如果这些值是(整数)数字,则不应将它们存储在字符串列中。如果其中有非数值,任何代码都很容易被破解 您可以尝试以下方法: DECLARE @mockup TABLE(ID INT IDENTITY,YourValue VARCHAR(100)) INSERT INTO @mockup VALUES('50'),('100'),('1000'),('9999'),('20000'); S

如何将下面左侧的值转换为括号中的值?(SQL Server 2012)


这似乎很容易。。。你自己试过什么

首先:如果这些值是(整数)数字,则不应将它们存储在字符串列中。如果其中有非数值,任何代码都很容易被破解

您可以尝试以下方法:

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”
这样的字符串强制转换为
十进制将返回一个数字。这个数字可以除以1000得到所需的值


如果需要提供的格式,可以在SQL Server 2012+上使用
format()
,但此函数被称为相当慢。。。如果这对您很重要,请搜索其他格式化数字的方法。这里有很多例子,所以…

SQL Server 2012
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