2016-12-06 3 views
0

Я хочу добавить ноль только одно значение цифр перед точкой Когда я использую Input (.):Pad нули для NVARCHAR столбца в таблице

1.3.45 TU 3 
1.2.5 TU 8 

Ожидаемый вывод:

01034503 
01020508 

Текущий запрос:

select REPLACE(
       replace(
          replace(@Column,'TU','') -- remove TU 
         ,'.','' -- remove dot 
         ) 
       ,' ','') -- remove space 
from Table; 

Выходной ток:

13453 
1258 
+0

Отметьте свой вопрос в базе данных, которую вы используете. –

ответ

1

Если SQL Server, вы можете использовать функцию Split/Синтаксическую нормализовать строковые

Declare @YourTable Table (YourField varchar(25)) 
Insert Into @YourTable values 
('1.3.45 TU 3'), 
('1.2.5 TU 8') 

Select A.* 
     ,NewField = B.String 
From @YourTable A 
Cross Apply (
     Select String = ltrim((Select cast(RetVal as varchar(25)) 
     From (Select RetSeq,RetVal=Right('00'+RetVal,2) 
       From [dbo].[udf-Str-Parse](replace(YourField,' ','.'),'.') 
       Where Try_Convert(int,RetVal)>=0) A 
     For XML Path (''))) 
     ) B 

Возвращает

YourField  NewField 
1.3.45 TU 3 01034503 
1.2.5 TU 8  01020508 

ОДС, если требуется

CREATE FUNCTION [dbo].[udf-Str-Parse] (@String varchar(max),@Delimiter varchar(10)) 
Returns Table 
As 
Return ( 
    Select RetSeq = Row_Number() over (Order By (Select null)) 
      ,RetVal = LTrim(RTrim(B.i.value('(./text())[1]', 'varchar(max)'))) 
    From (Select x = Cast('<x>'+ Replace(@String,@Delimiter,'</x><x>')+'</x>' as xml).query('.')) as A 
    Cross Apply x.nodes('x') AS B(i) 
); 
--Select * from [dbo].[udf-Str-Parse]('Dog,Cat,House,Car',',') 
--Select * from [dbo].[udf-Str-Parse]('John Cappelletti was here',' ') 
0

Где находятся нули? Вы хотите что-то вроде этого:

select ('0' +          -- initial zero 
     replace(replace(replace(@Column, 'TU', '' -- remove TU 
           ), '.', '0'   -- replace dot with zero 
         ), ' ', '' 
       )         -- remove space 
     ) 
from Table; 
+0

Спасибо, Гордон, но нули требуются только в том случае, если число имеет одну цифру. Ex input: 1.3.45 TU 3 Здесь 45 двузначная, поэтому нулевое заполнение не требуется. Ожидается 01034503 –