¿Cómo pongo la primera letra de cada nombre en mayúsculas y la segunda en minúsculas en celdas con mas de un dato? (oracle sql)

publicado por: Anonymous

En la tabla users_view, columna first_name, tengo registrados usuarios con 1 nombre, usuarios con 2 nombres, todo en mayúsculas, todo en minúsculas y también de ambas juntas.

Armé una query que convierte la primera letra en mayúsculas y desde la segunda en adelante lo convierte a minúsculas.

Esto funciona perfectamente para los usuarios que están registrados con un solo nombre, pero el problema lo tengo con los que tienen 2 nombres ya que el segundo nombre queda completo en minúsculas.

Ejemplo:

First_name
Juan francisco

El sql que armé es este:

SELECT  TO_CHAR(m.moddte, 'DD-MM-YYYY HH24:MI:SS') FECHA_MENSAJE,
    m.msg_id ID_MENSAJE,
    DECODE(m.msgtyp, '1', 'Shutdown', '2', 'Display and Shutdown', '3', 'Display', m.msgtyp) TIPO_MENSAJE,
    m.mod_usr_id USUARIO,
    UPPER(SUBSTR(u.first_name, 0, 1)) ||''|| LOWER(SUBSTR(u.first_name, 2)) NOMBRE,
    UPPER(SUBSTR(u.last_name, 0, 1)) ||''|| LOWER(SUBSTR(u.last_name, 2)) APELLIDO,
    m.msg MENSAJE
FROM    mtfmsg m
LEFT
JOIN    users_view u
ON  u.usr_id = m.mod_usr_id
WHERE   m.moddte >= (SYSDATE - 1 / 24 )
ORDER BY    m.moddte ASC

solución

Oracle incluye una función precisamente para hacer lo que describes. La función es INITCAP.

select initcap(u.first_name) as nombre,
       initcap(u.last_name) as apellido
  from ...

Demo

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *