with SampleData as ( -- this cte simply provides the sample data for the queryselect strvalfrom (values ('0008.22816'),('069.3142'))dt(strval))select strval, right('0000000' + substring(strval,1,charindex('.',strval) - 1), 7) + '.' + right('0000000' + substring(strval,charindex('.',strval) + 1,len(strval) - charindex('.',strval)), 7)from SampleData;
DECLARE @Tab TABLE( Value DECIMAL (14,7))INSERT INTO @Tab (Value) SELECT 0008.22816 -->> 0000008.0022816UNION ALL SELECT 069.3142 -->> 0000069.0003142SELECT T.Value ,OtrApp.ConvVal ,[7.7 Format]= RIGHT(('0000000'+CrsApp.Whole) , 7) + '.' + RIGHT (('0000000'+CrsApp.Frac) , 7)FROM @Tab TOUTER APPLY ( SELECT CONVERT(VARCHAR(15),T.Value)) OtrApp (ConvVal)CROSS APPLY (SELECT LEFT (OtrApp.ConvVal , CHARINDEX('.',OtrApp.ConvVal)-1) ,STUFF(OtrApp.ConvVal,1,CHARINDEX('.',OtrApp.ConvVal),'') ) CrsApp (Whole,Frac)
with t(v) as ( select '0008.22816' union all select '069.3142' )select [formattted] = replace(str(parsename(t.v,2),7),' ','0') + '.' + replace(str(parsename(t.v,1),7),' ','0'), * from t
DECLARE @S VARCHAR(50) ,@Split CHAR(1) ,@X XML ,@strNewValue VARCHAR(50) SET @S = 0008.22816 -->> 0000008.0022816SET @S = 069.3142 -->> 0000069.0003142SET @Split = '.'--split the two parts into separate elements using the XML readerSELECT @X = CONVERT(XML,'<root><s>' + REPLACE(@S,@Split,'</s><s>')+'</s></root>')SELECT --recombine the elements @strNewValue = COALESCE(@strNewValue + @Split,'') + CAST(Result.PaddedValue AS VARCHAR(MAX))FROM ( SELECT --add the padding REPLICATE('0',7-LEN(CAST(Value AS INT)))+Value AS PaddedValue FROM ( --make some table rows SELECT T.c.value('.','VARCHAR(MAX)') AS [Value] FROM @X.nodes('/root/s') T (c) ) Element ) ResultSELECT @strNewValue AS NewValue