为表中的 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 列填充零的主要内容,如果未能解决你的问题,请参考以下文章
只有在使用列列表并且 IDENTITY_INSERT 为 ON SQL Server 时,才能为表中的标识列指定显式值