Получить первую букву каждого слова в строке SQL

Возможный дубликат:
sql, чтобы выделить строку имени лица и вывести инициалы

В MS-SQL Server есть способ получить первую букву каждого слова в строке? Например:

Имя:

Майкл Джозеф Джексон

Запрос:

 SELECT name, [function] as initial FROM Customers 

Результат:

MJJ

Эта функция защитит ваши результаты от нескольких последовательных пробелов в исходной строке:

 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 :) 

Результаты:

 MJJ MJJ 

Вы хотите добавить некоторые проверки и обработку ошибок, прежде чем обновлять tblStudents или что-то еще, но это должно заставить вас начать.

 CREATE FUNCTION initials ( @s AS nvarchar(4000)) RETURNS nvarchar(100) AS BEGIN DECLARE @i nvarchar(100) = LEFT(@s, 1); -- first char in string DECLARE @p int = CHARINDEX(' ', @s); -- location of first space WHILE (@p > 0) -- while a space has been found BEGIN SET @i = @i + SUBSTRING(@s, @p + 1, 1) -- add char after space SET @p = CHARINDEX(' ', @s, @p + 1); -- find next space END RETURN @i END GO SELECT dbo.initials('Michael Joseph Jackson'); 

Предполагая, что мы делаем это в MSSQL2008R2, хотя в этом нет ничего существенного. Все, что у нас есть, это развлечение с помощью строковых манипуляций. Вы можете включить это в funciton или proc или просто запустить его непосредственно в анализаторе запросов.

 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 

Если вы не делаете этого для какой-то тривиальной цели, вам, скорее всего, захочется очистить данные, прежде чем пытаться его обработать. Имена часто предваряются заголовками, поля ввода данных подвержены ошибкам пользователя и т. Д.

Вероятно, вам придется использовать UDF: User Defined Function

Сначала вам нужна табличная функция, которая разбивает varchar и возвращает таблицу с одним столбцом под названием «S».

 CREATE FUNCTION dbo.fn_Split2 (@sep nvarchar(10), @s nvarchar(4000)) RETURNS table AS RETURN ( WITH Pieces(pn, start, stop) AS ( SELECT 1, 1, CHARINDEX(@sep, @s) UNION ALL SELECT pn + 1, stop + (datalength(@sep)/2), CHARINDEX(@sep, @s, stop + (datalength(@sep)/2)) FROM Pieces WHERE stop > 0 ) SELECT pn, SUBSTRING(@s, start, CASE WHEN stop > 0 THEN stop-start ELSE 4000 END) AS s FROM Pieces ) 

Получение инициалов легко:

 DECLARE @Initials VARCHAR(8000) SELECT @Initials = COALESCE(@Initials, '') + SUBSTRING(s, 1, 1) FROM dbo.fn_Split2(' ', 'Michael Joseph Jackson') SELECT @Initials 

Это возвращает «MJJ», если требуется.

SUBSTRING (строка, startpos, endpos) AS 'Initial'

  • Разбор JSON с SQL: как извлечь запись в объект JSON?
  • SQL Server: IsCharAlpha
  • Преобразование SQL Server выбирает столбец и преобразует его в строку
  • Разделить несколько строк на несколько столбцов
  • При попытке конвертировать строку в int
  • Необходимо распечатать все имена столбцов отсутствующих значений в SQL Server 2008
  • Мне нужна функция в sql-сервере, чтобы вставить пространство в каждое положение входной строки
  • Как конкатенировать строку и GETDATE () в MSSQL
  • Символ крышки (^) в позиции LIKE не работает должным образом
  • SQL-запрос, чтобы сделать столбец чисел строкой
  • Как отделить строку на основе условия?
  • Interesting Posts

    Нужна помощь SQL. Как выбрать строки для выполнения вставки?

    SQL – Невозможно преобразовать строку в формат YYYYMMDD

    Составной кластеризованный индекс и некластеризованный индекс в SQL Server 2005

    Запросы MS SQL иногда занимают более 500 мс

    Триггер после вставки не нулевой столбец

    Распределенная транзакция базы данных и транзакция с перекрестными базами данных

    Неожиданный результат из инструкции TSQL между операторами

    Создание новой таблицы из сгруппированной подстроки существующей таблицы

    В чем преимущество использования таблицы размеров даты перед непосредственным хранением даты?

    Альтернативы SQL Server Management Studio для просмотра / редактирования таблиц и запуска запросов

    Мне нужно использовать DATEDIFF, чтобы получить разницу в минутах между началом и финишем маршрутного патруля

    Инструкция Alter Procedure в Visual Studio дает «Этот оператор не распознается в этом контексте»

    self join in update query с транзитивными данными

    Почему я получаю либо нулевые строки, либо строку со значением NULL, просто изменив предложение SELECT?

    Избегайте показывать повторяющиеся Poptart Flavors, когда они теплые

    Давайте будем гением компьютера.