Каков наилучший способ заглавной буквы первой буквы каждого слова в строке в SQL Server.Каков наилучший способ заглавной буквы первой буквы каждого слова в строке в SQL Server
34
A
ответ
64
От http://www.sql-server-helper.com/functions/initcap.aspx
CREATE FUNCTION [dbo].[InitCap] (@InputString varchar(4000))
RETURNS VARCHAR(4000)
AS
BEGIN
DECLARE @Index INT
DECLARE @Char CHAR(1)
DECLARE @PrevChar CHAR(1)
DECLARE @OutputString VARCHAR(255)
SET @OutputString = LOWER(@InputString)
SET @Index = 1
WHILE @Index <= LEN(@InputString)
BEGIN
SET @Char = SUBSTRING(@InputString, @Index, 1)
SET @PrevChar = CASE WHEN @Index = 1 THEN ' '
ELSE SUBSTRING(@InputString, @Index - 1, 1)
END
IF @PrevChar IN (' ', ';', ':', '!', '?', ',', '.', '_', '-', '/', '&', '''', '(')
BEGIN
IF @PrevChar != '''' OR UPPER(@Char) != 'S'
SET @OutputString = STUFF(@OutputString, @Index, 1, UPPER(@Char))
END
SET @Index = @Index + 1
END
RETURN @OutputString
END
GO
Существует более простой/меньше один здесь (но не работает, если любая строка не имеет места, «Неверный параметр длины передается ПРАВОЙ функции.»):
0
Разновидностью один я использую в течение довольно продолжительного времени:
CREATE FUNCTION [widget].[properCase](@string varchar(8000)) RETURNS varchar(8000) AS
BEGIN
SET @string = LOWER(@string)
DECLARE @i INT
SET @i = ASCII('a')
WHILE @i <= ASCII('z')
BEGIN
SET @string = REPLACE(@string, ' ' + CHAR(@i), ' ' + CHAR(@i-32))
SET @i = @i + 1
END
SET @string = CHAR(ASCII(LEFT(@string, 1))-32) + RIGHT(@string, LEN(@string)-1)
RETURN @string
END
Вы можете легко изменить для обработки символов после элементов, отличных от пробелов, если хотите.
1
Другое решение без использования цикла - чистый подход на основе набора с рекурсивной КТР
create function [dbo].InitCap (@value varchar(max))
returns varchar(max) as
begin
declare
@separator char(1) = ' ',
@result varchar(max) = '';
with r as (
select value, cast(null as varchar(max)) [x], cast('' as varchar(max)) [char], 0 [no] from (select rtrim(cast(@value as varchar(max))) [value]) as j
union all
select right(value, len(value)-case charindex(@separator, value) when 0 then len(value) else charindex(@separator, value) end) [value]
, left(r.[value], case charindex(@separator, r.value) when 0 then len(r.value) else abs(charindex(@separator, r.[value])-1) end) [x]
, left(r.[value], 1)
, [no] + 1 [no]
from r where value > '')
select @result = @result +
case
when ascii([char]) between 97 and 122
then stuff(x, 1, 1, char(ascii([char])-32))
else x
end + @separator
from r where x is not null;
set @result = rtrim(@result);
return @result;
end
0
Здесь это самый простой код в одну строку.
select
LEFT(column, 1)+ lower(RIGHT(column, len(column)-1))
from [tablename]
-1
Вы должны попробовать это вместо
Select INITCAP(column_name) from table_name;
Это заглавной первую букву указанных атрибутов записей.
0
В таблице-функции:
CREATE FUNCTION dbo.InitCap(@v AS VARCHAR(MAX))
RETURNS TABLE
AS
RETURN
WITH a AS (
SELECT (
SELECT UPPER(LEFT(value, 1)) + LOWER(SUBSTRING(value, 2, LEN(value))) AS 'data()'
FROM string_split(@v, ' ')
FOR XML PATH (''), TYPE) ret)
SELECT CAST(a.ret AS varchar(MAX)) ret from a
GO
Обратите внимание, что string_split
требует COMPATIBILITY_LEVEL
130.
0
BEGIN
DECLARE @string varchar(100) = 'asdsadsd asdad asd'
DECLARE @ResultString varchar(200) = ''
DECLARE @index int = 1
DECLARE @flag bit = 0
DECLARE @temp varchar(2) = ''
WHILE (@Index <LEN(@string)+1)
BEGIN
SET @temp = SUBSTRING(@string, @Index-1, 1)
--select @temp
IF @temp = ' ' OR @index = 1
BEGIN
SET @ResultString = @ResultString + UPPER(SUBSTRING(@string, @Index, 1))
END
ELSE
BEGIN
SET @ResultString = @ResultString + LOWER(SUBSTRING(@string, @Index, 1))
END
SET @Index = @Index+ 1--increase the index
END
SELECT @ResultString
END
Смежные вопросы
- 1. В Qt; Каков наилучший способ заглавной буквы первой буквы каждого слова в QString?
- 2. Возврат первой буквы каждого слова с заглавной буквы
- 3. Функция Javascript для заглавной буквы первой буквы каждого слова
- 4. Создайте функцию для заглавной буквы первой буквы только в строке
- 5. заглавной первые буквы каждого слова в массиве
- 6. Почему бы не запустить? (Заполните буквы первой буквы каждого слова)
- 7. Использование Sed с заглавной буквы каждого слова
- 8. Получение первой буквы каждого слова в предложении?
- 9. Невозможно заглавные буквы первой буквы слова
- 10. Печать первой буквы каждого слова C
- 11. Предикат для поиска первой буквы каждого слова в строке слов
- 12. preg_match проверить верхний регистр первой буквы каждого слова в строке
- 13. Сплит слова с заглавной буквы в PostgreSQL
- 14. , заглавной буквы первой буквы в таблице mySQL, используя phpMyadmin
- 15. Строчить все буквы в строке, кроме первой буквы, и заглавные буквы первой буквы строки? -javascript
- 16. создание первой буквы каждого слова цвет css
- 17. Команда Unix для заглавной буквы первой буквы имени файла
- 18. Заглавие/Заглавная буква каждого слова в строке в Matlab?
- 19. Заглавие первой буквы слова
- 20. Заменить слова в строке на основе начальной буквы каждого слова
- 21. Конвенция для заглавной буквы первой буквы файла Ruby on Rails?
- 22. Заглавие первой буквы каждого предложения
- 23. Каков наилучший способ разделить буквы и цифры?
- 24. Заглавные буквы первой строки в строке
- 25. Заглавие первой буквы и удаление пробела в строке
- 26. Есть ли способ заглавной буквы первой буквы значения переменной в шаблонах кода Eclipse (Helios)
- 27. Javascript заглавные буквы первой буквы в строке, только если lengh> 2
- 28. Конвертирование свойства первой буквы каждого слова в верхний регистр
- 29. функции VB.NET для первой в верхнем регистре буквы каждого слова
- 30. Создание первой буквы каждого слова в верхнем регистре с условием
ли это сделать в SQL Server? Это не то, что я бы связал с сервером базы данных, а что-то сделанное путем проверки формы или даже представления. – 2008-09-10 19:09:31
Пользователи PostgreSQL: UPDATE [таблица] SET your_col = initcap (lower (your_col)); Это не вопрос Postgre, но он появляется сначала в google независимо. – 2013-10-10 14:38:37