我有一个varchar(18),它看起来像是000000000000055000。这里等于55.00,其中最后一个数字总是0,其余数字用零填充。
其他例子是 -
000000000000001260 - 1.26
000000000000039400 - 39.40
我如何将它从我所拥有的转换为我需要的?非常感谢
答案 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