2015-03-24 4 views
0

В моем ЗЕЬЕСТЕ, у меня есть:Получение верхнего в нижний регистр

, UserName

Когда это происходит через в запросе, он выглядит как: john.smith

Можно ли использовать CAST или CONVERT, чтобы изменить это на Джона Смита?

Любые советы с благодарностью оценили.

Спасибо.

+0

в php вы можете использовать ucwords http://php.net/manual/en/function.ucwords.php –

+0

, или это может вам помочь. http://www.joellipman.com/articles/sql/t-sql/713-convert-to-proper-case-in-t-sql.html –

+0

Предполагая, что это означает, что пользователю будет отображаться более читаемая информация, почему 't вы сохраняете дружественное имя для отображения пользователю (например, их фактическое имя?) –

ответ

0

Сначала замените период с пространством:

SELECT REPLACE(SELECT UserName FROM YourTable, '.', ' ') 

Сохранить в переменной, или поместить это выбрать непосредственно к функции ниже.

К сожалению, у меня нет t-sql в моем распоряжении прямо сейчас, поэтому я не могу проверить, чтобы синтаксис был на 100% правильным.

Затем установить только первые символы в верхний регистр. Если вы использовали oracle, я бы сказал вам использовать initcap, но это не существует в t-sql.

Взято из ссылки: http://www.devx.com/tips/Tip/17608

create function initcap (@text varchar(4000)) 
returns varchar(4000) 
as 

begin 
    declare  @counter int, 
     @length int, 
     @char char(1), 
     @textnew varchar(4000) 

    set @text  = rtrim(@text) 
    set @text  = lower(@text) 
    set @length  = len(@text) 
    set @counter = 1 

    set @text = upper(left(@text, 1)) + right(@text, @length - 1) 

    while @counter <> @length --+ 1 
    begin 
     select @char = substring(@text, @counter, 1) 

     IF @char = space(1) or @char = '_' or @char = ',' or @char = '.' or @char = '\' 
or @char = '/' or @char = '(' or @char = ')' 
     begin 
      set @textnew = left(@text, @counter) + upper(substring(@text, 
@counter+1, 1)) + right(@text, (@length - @counter) - 1) 
      set @text = @textnew 
     end 

     set @counter = @counter + 1 
    end 

    return @text 
end 

Поэтому использовать эту функцию, чтобы преобразовать строку в верхний регистр. Надеюсь это поможет.

0

Вы могли бы это сделать так:

DECLARE @UserName AS varchar(50) = 'JOHN.SMITH'

SELECT LEFT(UPPER(LEFT(@UserName, CHARINDEX('.', @UserName)-1)),1) + SUBSTRING(LOWER(LEFT(@UserName, CHARINDEX('.', @UserName)-1)),2,LEN(LEFT(@UserName, CHARINDEX('.', @UserName)-1))-1) + ' ' + LEFT(UPPER(RIGHT(@UserName, LEN(@UserName) - CHARINDEX('.', @UserName))),1) + SUBSTRING(LOWER(RIGHT(@UserName, LEN(@UserName) - CHARINDEX('.', @UserName))),2,LEN(RIGHT(@UserName, LEN(@UserName) - CHARINDEX('.', @UserName)))-1) 

Он получает все до ., а затем Uppers первую букву в то время как понижая остальное, а затем делает то же самое для всего после . ,

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

Смежные вопросы