获取SQL字符串中每个单词的第一个字母

Ald*_*nas 5 sql sql-server string get function

可能重复:
sql选择一个人名字符串并输出首字母

MS-SQL Server,有一种方法来获取字符串中每个单词的第一个字母?例如:

名称:

Michael Joseph Jackson

查询:

SELECT name, [function] as initial FROM Customers
Run Code Online (Sandbox Code Playgroud)

结果:

MJJ

Joh*_*wey 31

此函数将屏蔽您的结果与源字符串中的多个连续空格:

CREATE FUNCTION dbo.fnFirsties ( @str NVARCHAR(4000) )
RETURNS NVARCHAR(2000)
AS
BEGIN
    DECLARE @retval NVARCHAR(2000);

    SET @str=RTRIM(LTRIM(@str));
    SET @retval=LEFT(@str,1);

    WHILE CHARINDEX(' ',@str,1)>0 BEGIN
        SET @str=LTRIM(RIGHT(@str,LEN(@str)-CHARINDEX(' ',@str,1)));
        SET @retval+=LEFT(@str,1);
    END

    RETURN @retval;
END
GO

SELECT dbo.fnFirsties('Michael Joseph Jackson');
SELECT dbo.fnFirsties('  Michael   Joseph Jackson  '); -- multiple space protection :)
Run Code Online (Sandbox Code Playgroud)

结果:

MJJ
MJJ
Run Code Online (Sandbox Code Playgroud)


Car*_*rth 5

假设我们在 MSSQL2008R2 中执行此操作,尽管这里不涉及任何实际问题。我们所做的就是在字符串操作中获得一些乐趣。您可以将其放入函数或过程中,或者直接在查询分析器中运行它。

DECLARE @str varchar(250) = 'Michael Joseph Jackson' 
DECLARE @initials varchar(250) = substring(@str,1,1)

WHILE(charindex(' ',@str)!=0)
BEGIN
    DECLARE @currentSpace int = charindex(' ',@str)
    SET @initials += substring(@str,@currentSpace+1,1)
    SET @str = substring(@str,@currentSpace+1,len(@str))
END

SELECT @initials
Run Code Online (Sandbox Code Playgroud)

如果您不是为了一些微不足道的目的而这样做,您可能希望在尝试处理数据之前清理数据。名称通常以标题为前缀,数据输入字段易受用户错误等影响。