У меня есть таблица, которая была импортирована как ВЕРХНИЙ РЕГИСТР, и я хотел бы превратить ее в правильный регистр. Какой сценарий кто-нибудь из вас использовал для этого?
sql
sql-server
uppercase
title-case
Райан Китер
источник
источник
Ответы:
Вот UDF, который поможет ...
Однако вам все равно придется использовать его для обновления ваших данных.
источник
Эта функция:
Результат:
источник
O'DONNELL
не изменилось наO'donnell
.SET @o = @o + @c
кSET @o = @o + UPPER(@c)
. =)http://sqlmag.com/t-sql/how-title-case-column-value
источник
title
он пуст.WHERE title IS NOT NULL
в конец, чтобы решить проблему @Serg.SUBSTRING
вместоRIGHT
Если вы можете включить CLR в SQL Server (требуется 2005 или более поздняя версия ), вы можете создать функцию CLR, которая использует встроенную функцию TextInfo.ToTitleCase, которая позволит вам создать способ сделать это с учетом культуры всего за несколько строки кода.
источник
Я знаю, что это поздний пост в этой теме, но его стоит посмотреть. Эта функция у меня работает всегда. Так что подумал о том, чтобы поделиться им.
Тестовые звонки:
Полученные результаты:
источник
Я немного опоздал в игре, но я считаю, что это более функционально и работает с любым языком, включая русский, немецкий, тайский, вьетнамский и т. Д. Он будет переводить все в верхний регистр после 'или - или. или (или) или пробел (очевидно :).
источник
Если вы в SSIS импортируете данные со смешанным регистром и вам нужно выполнить поиск в столбце с правильным регистром, вы заметите, что поиск не выполняется, если источник смешанный, а источник поиска правильный. Вы также заметите, что вы не можете использовать правую и левую функции в SSIS для SQL Server 2008r2 для производных столбцов. Вот решение, которое мне подходит:
источник
Вот версия, в которой вместо цикла используется таблица последовательности или чисел. Вы можете изменить предложение WHERE, чтобы оно соответствовало вашим личным правилам, когда преобразовывать символ в верхний регистр. Я только что включил простой набор, который будет прописывать любую букву, после которой идет не буква, за исключением апострофов. Однако это означает, что 123apple будет иметь совпадение с «а», потому что «3» не является буквой. Если вам нужен просто пробел (пробел, табуляция, возврат каретки, перевод строки), вы можете заменить шаблон
'[^a-z]'
на'[' + Char(32) + Char(9) + Char(13) + Char(10) + ']'
.источник
Ссылка, которую я разместил выше, - отличный вариант, который решает главную проблему: мы никогда не сможем программно учесть все случаи (Смит-Джонс, фон Хаусен, Джон Смит, доктор медицины), по крайней мере, не изящным образом. Тони вводит понятие символа исключения / прерывания, чтобы иметь дело с этими случаями. В любом случае, основываясь на идее Cervo (верхние все нижние символы предваряются пробелом), операторы замены могут быть вместо этого заключены в одну замену на основе таблицы. На самом деле, в @alpha можно вставить любую комбинацию символов нижний / верхний, и оператор не изменится:
источник
Было бы разумно вести поиск исключений, чтобы позаботиться о фон Неймане, Маккейне, ДеГузмане и Джонсон-Смит.
источник
Заимствовал и улучшил ответ @Richard Sayakanit. Это обрабатывает несколько слов. Как и его ответ, здесь не используются какие-либо UDF, только встроенные функции (
STRING_SPLIT
иSTRING_AGG
), и это довольно быстро.STRING_AGG
требуется SQL Server 2017, но вы всегда можете воспользоватьсяSTUFF/XML
уловкой. Не обрабатывает каждое исключение, но может отлично работать для многих требований.источник
Небольшая модификация ответа @Galwegian, который, например, превращается
St Elizabeth's
вSt Elizabeth'S
.Эта модификация сохраняет апостроф-s в нижнем регистре, где s стоит в конце предоставленной строки или s следует за пробелом (и только в этих обстоятельствах).
Получается:
st elizabeth's
вSt Elizabeth's
o'keefe
вO'Keefe
o'sullivan
вO'Sullivan
Комментарии других о том, что для ввода не на английском языке предпочтительнее другие решения, остаются в силе.
источник
Я думаю, вы обнаружите, что следующее более эффективно:
Оператор замены можно вырезать и вставить прямо в запрос SQL. Это очень уродливо, однако, заменив @str на интересующий вас столбец, вы не заплатите цену за неявный курсор, как это было бы с размещенными таким образом udf. Я считаю, что даже использование моего UDF намного эффективнее.
О, и вместо того, чтобы вручную генерировать оператор замены, используйте это:
В любом случае это зависит от количества строк. Я бы хотел, чтобы вы могли просто сделать s / \ b ([az]) / uc $ 1 /, но хорошо, мы работаем с имеющимися у нас инструментами.
ПРИМЕЧАНИЕ. Вам придется использовать это так же, как и ... SELECT dbo.ProperCase (LOWER (column)), поскольку столбец находится в верхнем регистре. На самом деле он работает довольно быстро на моей таблице из 5000 записей (даже не одной секунды) даже с меньшим.
В ответ на шквал комментариев относительно интернационализации я представляю следующую реализацию, которая обрабатывает каждый символ ascii, полагаясь только на реализацию верхнего и нижнего уровней в SQL Server. Помните, что здесь используются переменные VARCHAR, что означает, что они могут содержать только значения ASCII. Чтобы использовать другие международные алфавиты, вы должны использовать NVARCHAR. Логика будет аналогичной, но вам нужно будет использовать UNICODE и NCHAR вместо ASCII AND CHAR, и оператор замены будет намного более масштабным ....
По сути, предпосылка моего метода заключается в обмене предварительных вычислений на эффективность. Полная реализация ASCII выглядит следующим образом:
источник
Не слишком ли поздно возвращаться и получать данные без верхнего регистра?
Сторонам фон Неймана, Маккейна, ДеГузмана и Джонсона-Смита вашей клиентской базы может не понравиться результат вашей обработки ...
Кроме того, я предполагаю, что это будет одноразовое обновление данных? Возможно, будет проще экспортировать, фильтровать / изменять и повторно импортировать исправленные имена в базу данных, а затем вы можете использовать подходы, отличные от SQL, для исправления имен ...
источник
Вот еще один вариант, который я нашел на форумах SQLTeam.com @ http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=47718
источник
Я знаю, что дьявол кроется в деталях (особенно в том, что касается личных данных людей), и что было бы очень хорошо иметь имена, написанные правильно с заглавной буквы, но из-за вышеупомянутого вида хлопот среди нас прагматичные, заботящиеся о времени среди нас используют следующие :
SELECT UPPER('Put YoUR O'So oddLy casED McWeird-nAme von rightHERE here')
По моему опыту, люди прекрасно видят ИХ ИМЯ ... даже когда это половина предложения.
Обратитесь к: россияне использовали карандаш!
источник
Только что узнал о
InitCap()
.Вот пример кода:
источник
Это работало в SSMS:
источник
Если вы знаете, что все данные - это всего лишь одно слово, вот решение. Сначала обновите столбец до более низкого уровня, а затем запустите следующее
источник
Недавно пришлось заняться этим и придумал следующее после того, как ничто не поразило все, что я хотел. Это сделает все предложение, случаи для специальной обработки слов. У нас также были проблемы с односимвольными «словами», которые обрабатываются многими более простыми методами, но не более сложными. Однократная возвращаемая переменная, без циклов и курсоров.
источник
Скопируйте и вставьте свои данные в MS Word и используйте встроенное преобразование текста, чтобы «заглавными буквами каждое слово». Сравните с вашими исходными данными, чтобы устранить исключения. Не вижу способа вручную обойти исключения типа "MacDonald" и "IBM", но именно так я сделал FWIW.
источник