首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在SQL中将零填充到子字符串?

如何在SQL中将零填充到子字符串?
EN

Stack Overflow用户
提问于 2017-11-30 03:02:39
回答 5查看 142关注 0票数 2

我有一个varchar类型的列,其文本类似于20171126-401-9-4496。字符串有4个部分,每个部分的长度是固定的:

第1-8位

第2-4位数字

第3-2位数字

第4-4位

我想在字符串的第二部分和第三部分填充一个‘0’,这样文本就变成了20171126-0401-09-4496,满足了每个部分的固定长度要求。我尝试了SUBSTRINGCHARINDEX函数,但没有得到想要的结果。这个问题该如何解决?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-11-30 03:12:04

对于PARSENAME黑客来说,这是一个多么完美的时刻!

代码语言:javascript
复制
SELECT PARSENAME(REPLACE(MyColumn,'-','.'),4)+'-'+
       RIGHT('0000'+PARSENAME(REPLACE(MyColumn,'-','.'),3),4)+'-'+
       RIGHT('00'+PARSENAME(REPLACE(MyColumn,'-','.'),2),2)+'-'+
       PARSENAME(REPLACE(MyColumn,'-','.'),1)
票数 6
EN

Stack Overflow用户

发布于 2017-11-30 03:17:58

如果你总是想在这些位置上插入一个'0‘,那么它的工作原理是这样的:

代码语言:javascript
复制
select stuff (stuff('20171126-401-9-4496',14,0,0),10,0,'0')

如果我们有可变长度的字段,那么它将像这样工作(第一个字段的例子):

代码语言:javascript
复制
select @str = '20175555-0001-9-46'

select @len =  (select charindex('-',substring(@str,10,100)))

select
case 
when @len = 2 
then stuff(@str,10,0,'000')
when @len = 3 
then stuff(@str,10,0,'00')
when @len = 4 
then stuff(@str,10,0,'0')
else
@str
end as string
票数 1
EN

Stack Overflow用户

发布于 2017-11-30 03:19:41

采用Tab Allemen所做的,您也可以将其应用于第一列和最后一列……

代码语言:javascript
复制
declare @var varchar(18) = '201711-1-9-4496'


SELECT right('00000000' + parsename(replace(@var,'-','.'),4),8) + '-'
        + right('0000' + parsename(replace(@var,'-','.'),3),4) + '-'
        + right('00' + parsename(replace(@var,'-','.'),2),2) + '-'
        + right('0000' + parsename(replace(@var,'-','.'),1),4) 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47559945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档