【问题标题】:Pad zeros for nvarchar column in table为表中的 nvarchar 列填充零
【发布时间】:2016-12-06 02:48:08
【问题描述】:

我只想在点 (.) 之前为单个数字值添加零 当我使用 输入:

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

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。

标签: sql padding


【解决方案1】:

如果是 SQL Server,您可以使用 Split/Parse 函数来规范化字符串

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

UDF(如果需要)

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',' ')

【讨论】:

    【解决方案2】:

    零在哪里?你想要这样的东西:

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

    【讨论】:

    • 感谢 Gordon,但仅当数字为单个数字时才需要零。 Ex 输入:1.3.45 TU 3 这里 45 是两位数,因此不需要零填充预期是 01034503
    猜你喜欢
    • 2021-03-11
    • 2017-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    相关资源
    最近更新 更多