字符串中的SQL Server空间

时间:2014-10-21 06:38:05

标签: sql sql-server sql-server-2008 sql-server-2012

我需要在字符串中添加空格。

Original String: BM14401886
Expected Result: BM 14 4018 86

4 个答案:

答案 0 :(得分:2)

可以使用LEFTSUBSTRINGRIGHT函数实现此目的。

查询

SELECT LEFT('BM14401886',2)+' '+
SUBSTRING('BM14401886',3,2)+' '+
SUBSTRING('BM14401886',5,4)+' '+
RIGHT('BM14401886',2);

Fiddle Demo

答案 1 :(得分:1)

我完全同意@ Ullas的回答。 但是根据标准,如果我们需要在查询中使用空格anywhare那么我们必须使用

Space(no of space)

在查看查询后,任何人都无法判断查询中使用了多少空格,它更具可读性。

这里的情况很简单但是如果你想在查询中使用10个空格,那么在查看查询中有多少空格后就无法说出来。

SELECT LEFT('BM14401886',2)+space(1)+
SUBSTRING('BM14401886',3,2)+space(1)+
SUBSTRING('BM14401886',5,4)+space(1)+
RIGHT('BM14401886',2);

答案 2 :(得分:0)

我想你想要这个:

select substring(val,1,2) + ' ' + substring(val,3,2) + ' ' + 
substring(val,5,4) + ' ' + substring(val,9,2) as val
from yourtable

Sql fiddle:http://sqlfiddle.com/#!3/e075f/3

答案 3 :(得分:0)

就我个人而言,我并不喜欢使用LEFTRIGHTSUBSTRING这样的事情,因为它会使SQL看起来很乱。

如果在存储过程中使用单个值进行一次性操作,则可以执行以下操作:

declare @somestring as varchar(20) = 'BM14401886'
declare @position as int = 3 -- first space

while @position < LEN(@somestring)
begin
    select @somestring = stuff(@somestring, @position, 0, ' ')
    set @position = @position + 3
end

select @somestring as Result -- 'BM 14 40 18 86'

我假设您在返回多行时可能希望在表列上执行此操作,在这种情况下,我会将此代码放在您可以调用的函数中。

create function AddSpacesToString (@somestring VARCHAR(20)) returns varchar(20)
as
begin
    declare @position as int = 3 -- first space

    while @position < LEN(@somestring)
    begin
        select @somestring = stuff(@somestring, @position, 0, ' ')
        set @position = @position + 3
    end   

    return @somestring
end
go

所以SELECT语句看起来不像LEFTRIGHTSUBSTRING

SELECT dbo.AddSpacesToString ([YourColumn]) as FormattedString
FROM [YourTable]