为表中的 nvarchar 列填充零

Posted

技术标签:

【中文标题】为表中的 nvarchar 列填充零【英文标题】:Pad zeros for nvarchar column in table 【发布时间】: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

【问题讨论】:

用您正在使用的数据库标记您的问题。 【参考方案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

以上是关于为表中的 nvarchar 列填充零的主要内容,如果未能解决你的问题,请参考以下文章

Oracle过程增加字符串数据类型并将其存储为表中的列之一

当数据库为表中的一列返回空值时如何处理错误

只有在使用列列表并且 IDENTITY_INSERT 为 ON SQL Server 时,才能为表中的标识列指定显式值

如何在Postgres中为表中的虚拟列创建数据库链接?

当 IDENTITY_INSERT 设置为 OFF 时,不能为表中的标识列插入显式值

如何用存储过程填充表中的所有空值