Мой Kbyte.Ru
Рассылка Kbyte.Ru
Группы на Kbyte.Ru
Партнеры Kbyte.Ru
Реклама
Сделано руками
Сделано руками
> Исходные коды - Narayana Vyas Kondreddi -

Microsoft SQL Server - Строки

Все примеры / Строки

Каждое слово с большой буквы

Автор: Narayana Vyas Kondreddi | добавлено: 04.02.2011, 20:37 | просмотров: 4494 (1+) | комментариев: 0 | рейтинг: *x6
Функция T-SQL, которая делает каждую первую букву всех слов в указанном тексте заглавной. Функция умеет работать как с английским, так и с русским алфавитом.

Инструкции

Пример использования:

SELECT dbo.PROPERCASE('василий пупкин')

Код

CREATE FUNCTION PROPERCASE
(
  @input nvarchar(max)
)
RETURNS nvarchar(max)
AS
BEGIN
	IF @input IS NULL 
	BEGIN
		RETURN NULL
	END
	
	DECLARE @output nvarchar(max)
	DECLARE @ctr int, @len int, @found_at int
	DECLARE @LOWER_CASE_a int, @LOWER_CASE_z int, @Delimiter char(3), @UPPER_CASE_A int, @UPPER_CASE_Z int
	DECLARE @RU_LOWER_CASE_a int, @RU_LOWER_CASE_z int, @RU_UPPER_CASE_A int, @RU_UPPER_CASE_Z int
	
	SET @ctr = 1
	SET @len = LEN(@input)
	SET @output = ''
	
	-- для английских букв
	SET @LOWER_CASE_a = 97
	SET @LOWER_CASE_z = 122
	SET @Delimiter = ' ,-'
	SET @UPPER_CASE_A = 65
	SET @UPPER_CASE_Z = 90

  -- для русских букв
	SET @LOWER_CASE_a = 224
	SET @LOWER_CASE_z = 255
	SET @UPPER_CASE_A = 192
	SET @UPPER_CASE_Z = 223

	WHILE @ctr <= @len
	BEGIN
		WHILE CHARINDEX(SUBSTRING(@input,@ctr,1), @Delimiter) > 0
		BEGIN
			SET @output = @output + SUBSTRING(@input,@ctr,1)
			SET @ctr = @ctr + 1
		END

		IF (ASCII(SUBSTRING(@input,@ctr,1)) BETWEEN @LOWER_CASE_a AND @LOWER_CASE_z) OR 
		   (ASCII(SUBSTRING(@input,@ctr,1)) BETWEEN @RU_LOWER_CASE_a AND @RU_LOWER_CASE_z)
		BEGIN
			SET @output = @output + UPPER(SUBSTRING(@input,@ctr,1))
		END
		ELSE
		BEGIN
			SET @output = @output + SUBSTRING(@input,@ctr,1)
		END
		
		SET @ctr = @ctr + 1

		WHILE CHARINDEX(SUBSTRING(@input,@ctr,1), @Delimiter) = 0 AND (@ctr <= @len)
		BEGIN
			IF (ASCII(SUBSTRING(@input,@ctr,1)) BETWEEN @UPPER_CASE_A AND @UPPER_CASE_Z) OR
			   (ASCII(SUBSTRING(@input,@ctr,1)) BETWEEN @RU_UPPER_CASE_A AND @RU_UPPER_CASE_Z)
			BEGIN
				SET @output = @output + LOWER(SUBSTRING(@input,@ctr,1))
			END
			ELSE
			BEGIN
				SET @output = @output + SUBSTRING(@input,@ctr,1)
			END
			SET @ctr = @ctr + 1
		END
		
	END
RETURN @output
END
Об авторе

Narayana Vyas Kondreddi

Нет информации об авторе...
Narayana Vyas Kondreddi
Последние комментарии (всего: 0)

Добавлять комментарии могут только зарегистрированные пользователи сайта.
Если у Вас уже есть учетная запись на Kbyte.Ru, пройдите процедуру авторизации OpenID.
Если Вы еще не зарегистрированы на Kbyte.Ru - зарегистрируйтесь.


Нет комментариев...

Авторизация
 
OpenID
Зарегистрируйся и получи 10% скидку на добавление своего сайта в каталоги! Подробнее »
Поиск по сайту
Реклама
Счетчики