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)
假设我们在 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)
如果您不是为了一些微不足道的目的而这样做,您可能希望在尝试处理数据之前清理数据。名称通常以标题为前缀,数据输入字段易受用户错误等影响。
归档时间: |
|
查看次数: |
47448 次 |
最近记录: |