Tengo una tabla que se importó en MAYÚSCULAS y me gustaría convertirla en una caja adecuada. ¿Qué guión ha usado alguno de ustedes para completar esto?
sql
sql-server
uppercase
title-case
RyanKeeter
fuente
fuente
Respuestas:
Aquí hay un UDF que hará el truco ...
Sin embargo, aún tendrá que usarlo para actualizar sus datos.
fuente
Esta función:
Resultado:
fuente
O'DONNELL
no cambie aO'donnell
.SET @o = @o + @c
aSET @o = @o + UPPER(@c)
. =)http://sqlmag.com/t-sql/how-title-case-column-value
fuente
title
está vacío.WHERE title IS NOT NULL
al final para resolver el problema de @Serg.SUBSTRING
lugar deRIGHT
Si puede habilitar CLR en SQL Server (requiere 2005 o posterior), entonces podría crear una función CLR que use la función incorporada TextInfo.ToTitleCase que le permitiría crear una forma consciente de la cultura de hacer esto en solo unos pocos líneas de código.
fuente
Sé que esta es una publicación tardía en este hilo, pero vale la pena mirar. Esta función funciona para mí siempre. Así que pensé en compartirlo.
Llamadas de prueba:
Resultados:
fuente
Llegué un poco tarde en el juego, pero creo que esto es más funcional y funciona con cualquier idioma, incluyendo ruso, alemán, tailandés, vietnamita, etc. Hará mayúsculas cualquier cosa después de 'o - o. o (o) o espacio (obviamente :).
fuente
Si está en SSIS importando datos que tienen mayúsculas y minúsculas mixtas y necesita realizar una búsqueda en una columna con el caso adecuado, notará que la búsqueda falla cuando la fuente está mezclada y la fuente de búsqueda es la adecuada. También notará que no puede usar las funciones derecha e izquierda es SSIS para SQL Server 2008r2 para columnas derivadas. Aquí hay una solución que funciona para mí:
fuente
Aquí hay una versión que usa una secuencia o una tabla de números en lugar de un bucle. Puede modificar la cláusula WHERE para que se adapte a sus reglas personales sobre cuándo convertir un carácter a mayúsculas. Acabo de incluir un conjunto simple que pondrá en mayúsculas cualquier letra que vaya precedida de una no letra, con la excepción de los apóstrofos. Sin embargo, esto significa que 123apple tendría una coincidencia en la "a" porque "3" no es una letra. Si solo desea espacios en blanco (espacio, tabulación, retorno de carro, avance de línea), puede reemplazar el patrón
'[^a-z]'
con'[' + Char(32) + Char(9) + Char(13) + Char(10) + ']'
.fuente
El enlace que publiqué anteriormente es una excelente opción que aborda el problema principal: que nunca podremos dar cuenta programáticamente de todos los casos (Smith-Jones, von Haussen, John Smith MD), al menos no de una manera elegante. Tony introduce el concepto de carácter de excepción / ruptura para tratar estos casos. De todos modos, sobre la base de la idea de Cervo (en la parte superior todos los caracteres inferiores precedidos por un espacio), las declaraciones de reemplazo podrían envolverse en una sola tabla de reemplazo basada en su lugar. Realmente, cualquier combinación de caracteres de abajo / arriba podría insertarse en @alpha y la declaración no cambiaría:
fuente
Tendría sentido mantener una búsqueda de excepciones para ocuparse de los de von Neumann, McCain, DeGuzman y Johnson-Smith.
fuente
Tomó prestado y mejoró la respuesta de @Richard Sayakanit. Esto maneja varias palabras. Como su respuesta, esto no usa ninguna UDF, solo funciones integradas (
STRING_SPLIT
ySTRING_AGG
) y es bastante rápido.STRING_AGG
requiere SQL Server 2017 pero siempre puedes usar elSTUFF/XML
truco. No manejará todas las excepciones, pero puede funcionar muy bien para muchos requisitos.fuente
Una ligera modificación a la respuesta de @ Galwegian, que se convierte, por ejemplo,
St Elizabeth's
enSt Elizabeth'S
.Esta modificación mantiene los apóstrofos en minúsculas donde la s viene al final de la cadena proporcionada o la s va seguida de un espacio (y solo en esas circunstancias).
Da vueltas:
st elizabeth's
dentroSt Elizabeth's
o'keefe
dentroO'Keefe
o'sullivan
dentroO'Sullivan
Los comentarios de otros de que son preferibles diferentes soluciones para la entrada que no es en inglés siguen siendo el caso.
fuente
Creo que encontrará que lo siguiente es más eficiente:
La declaración de reemplazo se puede cortar y pegar directamente en una consulta SQL. Es muy feo, sin embargo, al reemplazar @str con la columna que le interesa, no pagará un precio por un cursor implícito como lo haría con las udfs así publicadas. Encuentro que incluso usando mi UDF es mucho más eficiente.
Ah, y en lugar de generar la declaración de reemplazo a mano, use esto:
De todos modos depende del número de filas. Ojalá pudieras hacer s / \ b ([az]) / uc $ 1 /, pero bueno, trabajamos con las herramientas que tenemos.
NOTA: tendría que usar esto ya que tendría que usarlo como .... SELECT dbo.ProperCase (LOWER (column)) ya que la columna está en mayúsculas. En realidad, funciona bastante rápido en mi tabla de 5,000 entradas (ni siquiera un segundo) incluso con la más baja.
En respuesta a la avalancha de comentarios sobre la internacionalización, presento la siguiente implementación que maneja cada carácter ascii confiando solo en la implementación de SQL Server de superior e inferior. Recuerde, las variables que estamos usando aquí son VARCHAR, lo que significa que solo pueden contener valores ASCII. Para utilizar más alfabetos internacionales, debe utilizar NVARCHAR. La lógica sería similar, pero necesitaría usar UNICODE y NCHAR en lugar de ASCII Y CHAR y la declaración de reemplazo sería mucho más grande ...
Básicamente, la premisa del método my es cambiar la pre-computación por eficiencia. La implementación completa de ASCII es la siguiente:
fuente
¿Es demasiado tarde para volver atrás y obtener los datos sin mayúsculas?
Es posible que a los von Neumann, McCain, DeGuzman y Johnson-Smith de su base de clientes no les guste el resultado de su procesamiento ...
Además, supongo que se pretende que sea una actualización única de los datos. Podría ser más fácil exportar, filtrar / modificar y volver a importar los nombres corregidos a la base de datos, y luego puede usar enfoques que no sean SQL para corregir nombres ...
fuente
Aquí hay otra variación que encontré en los foros de SQLTeam.com @ http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=47718
fuente
Sé que el diablo está en los detalles (especialmente en lo que respecta a los datos personales de las personas), y que sería muy bueno tener los nombres en mayúscula correctamente, pero el tipo de molestia anterior es la razón por la que los pragmáticos y conscientes del tiempo entre nosotros usan lo siguiente :
SELECT UPPER('Put YoUR O'So oddLy casED McWeird-nAme von rightHERE here')
En mi experiencia, la gente está bien viendo SU NOMBRE ... incluso cuando está a la mitad de una oración.
Refiérase a: ¡los rusos usaron un lápiz!
fuente
Acabo de enterarme
InitCap()
.Aquí hay un código de muestra:
fuente
Esto funcionó en SSMS:
fuente
Si sabe que todos los datos son solo una palabra, aquí tiene una solución. Primero actualice la columna a todos los más bajos y luego ejecute lo siguiente
fuente
Recientemente tuve que abordar esto y se me ocurrió lo siguiente después de que nada alcanzara todo lo que quería. Esto hará una oración completa, casos para manejo especial de palabras. También tuvimos problemas con las 'palabras' de un solo carácter que manejan muchos de los métodos más simples pero no los más complicados. Variable de retorno única, sin bucles ni cursores.
fuente
Copie y pegue sus datos en MS Word y utilice la conversión de texto incorporada a "Capitalizar cada palabra". Compare con sus datos originales para abordar las excepciones. No veo ninguna forma de evitar manualmente las excepciones de tipo "MacDonald" e "IBM", pero así fue como lo hice FWIW.
fuente