如何将文本转换为十进制

时间:2017-05-16 14:06:04

标签: sql sql-server tsql formatting

我有一个varchar(18),它看起来像是000000000000055000。这里等于55.00,其中最后一个数字总是0,其余数字用零填充。

其他例子是 -

000000000000001260 - 1.26

000000000000039400 - 39.40

我如何将它从我所拥有的转换为我需要的?非常感谢

2 个答案:

答案 0 :(得分:0)

我认为这是sql?!

顺便说一句,varchar到decimal是在t-sql上隐式转换的。 在sql查询上尝试这个,你可以看到我的意思。

另见: https://docs.microsoft.com/en-us/sql/t-sql/data-types/data-type-conversion-database-engine

DECLARE @ValueToConvert VARCHAR(18) = '00000000005320'
DECLARE @ValueConverted Decimal(18,2) = 0

DECLARE @Padding Int = 2
DECLARE @temp1 VARCHAR(18) = SUBSTRING ( @ValueToConvert ,0 ,  CHARINDEX('0', @ValueToConvert,LEN(@ValueToConvert)) - @Padding )
DECLARE @temp2 VARCHAR(18) = SUBSTRING ( @ValueToConvert ,  CHARINDEX('0', @ValueToConvert,LEN(@ValueToConvert)) - @Padding, CHARINDEX('0', @ValueToConvert,LEN(@ValueToConvert)))

set @ValueConverted = (concat(@temp1,'.',@temp2))

SELECT @ValueConverted

答案 1 :(得分:0)

如果2012年以上,我会建议 try_convert(),而不仅仅是 convert()。 Try_Convert()不会生成错误,但会为伪造数据返回null。

示例

Declare @YourTable table (SomeCol varchar(50))
Insert Into @YourTable values
 ('000000000000001260')
,('000000000000039400')

Select SomeCol
      ,AsValue  = convert(decimal(18,2),somecol)/1000
 From  @YourTable

<强>返回

SomeCol             AsValue
000000000000001260  1.2600000
000000000000039400  39.4000000