Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Слова с заглавной буквы  [new]
=Сергей=
Member

Откуда:
Сообщений: 336
Как сделать чтоб слова в строке начинались заглавной буквы, а остальные маленькие?
'ОтличНый дЕнь длЯ ОтдыхА' => 'Отличный День Для Отдыха'
11 ноя 16, 19:13    [19884579]     Ответить | Цитировать Сообщить модератору
 Re: Слова с заглавной буквы  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Разрезать на слова -> lower() -> заменить первую букву на upper() -> склеить назад
11 ноя 16, 19:16    [19884584]     Ответить | Цитировать Сообщить модератору
 Re: Слова с заглавной буквы  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
CLR функцию напишите, если не хотите это делать на клиенте.
14 ноя 16, 11:27    [19890070]     Ответить | Цитировать Сообщить модератору
 Re: Слова с заглавной буквы  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 942
=Сергей=,
встроенного ничего нет, каждый изобретает свой велосипед
ALTER FUNCTION [dbo].[get_word_position](
  @value VARCHAR(MAX),
  @i INT = 0
)
RETURNS INT
AS
BEGIN
  IF @i > LEN( @value ) RETURN 0
  IF @i = 0 AND LEFT( @value, 1 ) != ' ' RETURN 1 
  SET @i = CHARINDEX( ' ', @value, @i );
  IF @i = 0 RETURN 0
  WHILE SUBSTRING( @value, @i, 1 ) = SUBSTRING( @value, @i + 1, 1 )
    SET @i += 1;
  RETURN @i + 1;
END
GO
ALTER FUNCTION [dbo].[capitalize_words](
  @value VARCHAR(MAX)
)
RETURNS VARCHAR(MAX)
AS
BEGIN
  IF @value IS NULL RETURN NULL;
  IF LEN( @value ) = 0 RETURN 0
  DECLARE @res VARCHAR(MAX) = LOWER( @value );
  DECLARE @i INT = 0, @l INT = LEN( @res );
  SET @i = [dbo].[get_word_position]( @res, @i );
  WHILE @i > 0
  BEGIN
    SET @res = SUBSTRING( @res, 1, @i - 1 ) + UPPER( SUBSTRING( @res, @i, 1 ) ) + SUBSTRING( @res, @i + 1, @l - @i );
    SET @i = [dbo].[get_word_position]( @res, @i );
  END
  RETURN @res;
END
GO
SELECT
  [dbo].[capitalize_words]( 'ОтличНый дЕнь длЯ ОтдыхА' )
15 ноя 16, 15:23    [19896421]     Ответить | Цитировать Сообщить модератору
 Re: Слова с заглавной буквы  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
declare @s varchar(max) = 'ОтличНый  дЕнь  длЯ ОтдыхА';

with a as
(
 select
  t.n.value('.', 'varchar(max)') as word
 from
  (select cast('<word>' + replace(cast(cast('' as xml).query('sql:variable("@s")') as varchar(max)), ' ', '</word><word>') + '</word>' as xml)) s(x) cross apply
  s.x.nodes('/word') t(n)
)
select (
 select
  isnull(nullif(stuff(lower(a.word), 1, 1, upper(left(a.word, 1))), ''), ' ') as [data()]
 from
  a
 for xml path(''), type
).value('.', 'varchar(max)');
15 ноя 16, 15:57    [19896611]     Ответить | Цитировать Сообщить модератору
 Re: Слова с заглавной буквы  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 942
Вот только зачем это все?
15 ноя 16, 16:25    [19896815]     Ответить | Цитировать Сообщить модератору
 Re: Слова с заглавной буквы  [new]
o-o
Guest
Руслан Дамирович
Вот только зачем это все?

ето так в инглише заголовки пишут, каждое слово с заглавной.
надо же соответствовать....эээ...им, короче, подражать, вот!
15 ноя 16, 16:58    [19896996]     Ответить | Цитировать Сообщить модератору
 Re: Слова с заглавной буквы  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
o-o
Руслан Дамирович
Вот только зачем это все?

ето так в инглише заголовки пишут, каждое слово с заглавной.
надо же соответствовать....эээ...им, короче, подражать, вот!


Только правило там сложнее

Пишутся с большой первое слово всегда и все слова кроме предлогов, союзов и артиклей.

http://www.livescience.com/50718-weekend-reading.html
The Most Interesting Science News Articles of the Week
New Record! Robot Solves Rubik's Cube in Less Than a Second
Newfound Ancient 'Sea Monster' Is Largest Yet from Antarctica:

Но если вы загляните на CNN.COM , то там такого не наблюдается:
Russia charges economy minister with bribery

Так что правило тут сложнее и решать на SQL не рекомендую. Найдите сервис по проверке орфографии и работайте через него.
15 ноя 16, 17:05    [19897029]     Ответить | Цитировать Сообщить модератору
 Re: Слова с заглавной буквы  [new]
o-o
Guest
о блин, воронин, это такое толстое шутко.
а вам надо сюда: 19896749
15 ноя 16, 17:07    [19897044]     Ответить | Цитировать Сообщить модератору
 Re: Слова с заглавной буквы  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
o-o
о блин, воронин, это такое толстое шутко.
а вам надо сюда: 19896749


Надо Вам съездить опробовать страну Трампанию в её новом виде. Глядишь и английский привычным станет.
15 ноя 16, 17:10    [19897063]     Ответить | Цитировать Сообщить модератору
 Re: Слова с заглавной буквы  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
Вот отсюда http://omegacoder.com/?p=575

Но боюсь, что список слов тут неполный

/*
using System.Globalization;
using System.Threading;
using System.Text.RegularExpressions;
*/
 
/// <summary>
/// An Extension Method to allow us t odo "The Title Of It".asTitleCase()
/// which would return a TitleCased string.
/// </summary>
/// <param name="title">Title to work with.</param>
/// <returns>Output title as TitleCase</returns>
public static string asTitleCase ( this string title)
{
    string WorkingTitle = title;
 
    if ( string.IsNullOrEmpty( WorkingTitle ) == false )
    {
        char[] space = new char[] { ' ' };
 
        List<string> artsAndPreps = new List<string>()
            { "a", "an", "and", "any", "at", "from", "into", "of", "on", "or", "some", "the", "to", };
 
        //Get the culture property of the thread.
        CultureInfo cultureInfo = Thread.CurrentThread.CurrentCulture;
        //Create TextInfo object.
        TextInfo textInfo = cultureInfo.TextInfo;
 
        //Convert to title case.
        WorkingTitle = textInfo.ToTitleCase( title.ToLower() );
 
        List<string> tokens = WorkingTitle.Split( space, StringSplitOptions.RemoveEmptyEntries ).ToList();
 
        WorkingTitle = tokens[0];
 
        tokens.RemoveAt(0);
 
        WorkingTitle += tokens.Aggregate<String, String>( String.Empty, ( String prev, String input )
                                => prev +
                                    ( artsAndPreps.Contains( input.ToLower() ) // If True
                                        ? " " + input.ToLower()              // Return the prep/art lowercase
                                        : " " + input ) );                   // Otherwise return the valid word.
 
        // Handle an "Out Of" but not in the start of the sentance
        WorkingTitle = Regex.Replace( WorkingTitle, @"(?!^Out)(Out\s+Of)", "out of" );
    }
 
    return WorkingTitle;
 
}
15 ноя 16, 17:23    [19897132]     Ответить | Цитировать Сообщить модератору
 Re: Слова с заглавной буквы  [new]
Strangers
Member [заблокирован]

Откуда: Україна
Сообщений: 2613
как вариант

DECLARE @s varchar(1000) = 'ОтличНый дЕнь длЯ ОтдыхА'
DECLARE @Result VARCHAR(1000) = ''

;WITH asd as
(select substring(@s,number,1) as s, number
	from master..spt_values
	where type = 'P' and number between 1 and LEN(@s))
SELECT @Result = @Result + case when (SELECT top 1 s FROM asd WHERE number + 1 = k.number) = ' ' or k.number = 1 then UPPER(k.s) else LOWER(k.s) end 
FROM asd k

SELECT @Result	
15 ноя 16, 18:16    [19897308]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить