Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

[SOLUCIONADO] Obtener registros en mayusculas

Estas en el tema de Obtener registros en mayusculas en el foro de SQL Server en Foros del Web. Buenos días, Tengo problemas con una QUERY. Necesito mostrar de un campo solo los registros que estén en mayúsculas. Con la función: upper, me muestra ...
  #1 (permalink)  
Antiguo 02/04/2015, 03:54
 
Fecha de Ingreso: febrero-2015
Mensajes: 55
Antigüedad: 9 años, 1 mes
Puntos: 7
Obtener registros en mayusculas

Buenos días,
Tengo problemas con una QUERY.
Necesito mostrar de un campo solo los registros que estén en mayúsculas.
Con la función: upper, me muestra los registros que contienen mayúscula, pero el resto del campo es en minúsculas y también me lo muestra.

Solo necesitaría la palabra en mayúsculas.

CAMPO1
información sobre EVENTOS todos los dias
navidades FUERA del pueblo.
fiesta para TODO el mundo.


Tendría que mostrarme el Select, EVENTOS, FUERA, TODOS...

Espero que me exprese con claridad.
Muchas gracias.

Saludos!
  #2 (permalink)  
Antiguo 05/04/2015, 05:19
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 8 meses
Puntos: 40
Respuesta: Obtener registros en mayusculas

No se si esta solución es la más eficiente, pero me parece que es correcta y no hace falta crear nuevos objetos.
Los datos:
Código SQL:
Ver original
  1. CREATE TABLE #T(CAMPO1 VARCHAR(MAX));
  2. INSERT
  3. INTO    #T
  4. VALUES  ('información sobre EVENTOS todos los dias'),
  5.         ('navidades FUERA del pueblo.'),
  6.         ('fiesta para TODO el mundo');
La recuperación recursiva:
Código SQL:
Ver original
  1. WITH T AS
  2. (SELECT *,
  3.         (SELECT Iif(Ascii(SUBSTRING(CAMPO1,1,1)) BETWEEN 65 AND 90,CAMPO1,Stuff(CAMPO1,1,1,'#'))) NuevoCAMPO1
  4. FROM    (SELECT 1 N,
  5.                 CAMPO1
  6.         FROM    #T) T
  7. UNION ALL
  8. SELECT  N+1,
  9.         CAMPO1,
  10.         (SELECT Iif(Ascii(SUBSTRING(NuevoCAMPO1,N+1,1)) BETWEEN 65 AND 90,NuevoCAMPO1,Stuff(NuevoCAMPO1,T.N+1,1,'#'))) NuevoCAMPO1
  11. FROM    T
  12. WHERE   N+1<=Len(CAMPO1))
  13. SELECT  *,
  14.         REPLACE(NuevoCAMPO1,'#','') NuevoCAMPO
  15. FROM    T
  16. WHERE   N=Len(NuevoCAMPO1);
Si entre las mayusculas hay caracteres especiales tales como Á o Ñ, hay que añadir sus valores (ascii) a las condiciones.
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #3 (permalink)  
Antiguo 07/04/2015, 01:35
 
Fecha de Ingreso: febrero-2015
Mensajes: 55
Antigüedad: 9 años, 1 mes
Puntos: 7
Respuesta: Obtener registros en mayusculas

Antes de nada, muchas gracias por la ayuda.
No funciona el código, e realizado la prueba tal cual me la has mostrado para adaptarlo a mi Script, pero me da los siguientes errores:
Cita:
Msg 156, Level 15, State 1, Line 3
Incorrect syntax near the keyword 'BETWEEN'.
Msg 102, Level 15, State 1, Line 6
Incorrect syntax near 'T'.
Msg 156, Level 15, State 1, Line 10
Incorrect syntax near the keyword 'BETWEEN'.
No se ya como salir de este lio, al final realizaré una restructura de tablas creo.
Muchas gracias!
  #4 (permalink)  
Antiguo 07/04/2015, 01:54
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 8 meses
Puntos: 40
Respuesta: Obtener registros en mayusculas

Cuál es tu versión?
La función Iif esta apoyada a partir de 2012.
Si utilizas versión previa, intenta este sintaxis:
Código SQL:
Ver original
  1. CASE WHEN Ascii(SUBSTRING(CAMPO1,1,1)) BETWEEN 65 AND 90 THEN CAMPO1 ELSE Stuff(CAMPO1,1,1,'#')) END
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #5 (permalink)  
Antiguo 07/04/2015, 02:25
 
Fecha de Ingreso: febrero-2015
Mensajes: 55
Antigüedad: 9 años, 1 mes
Puntos: 7
Respuesta: Obtener registros en mayusculas

Muchas gracias,
Funciona y lo e adaptado a mi Script.
Gracias por todo ! ;)

Etiquetas: mayusculas, registros, select
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:04.