Deseo mostrar mis datos en este formato:

First_Name  Mid_Name  Last_Name
All         Ahmad     Khan

Este es mi código

select substr(customer_name1, 0, instr(customer_name1, ' ')-1) as first_name
     , substr(customer_name1, instr(customer_name1, ' ')+1) as mid_name 
     , ... as last_name
  from sttm_customers 
 where customer_name1 = 'ALI AHMAD KHAN'

Alguien me puede ayudar con la forma en que debería agregar el apellido en mi informe?

  • ¿Inversa «restar» método de existir ? Entonces usted puede conseguir el apellido de la final
InformationsquelleAutor Taoqir | 2012-12-14

5 Comentarios

  1. 4

    Que no se puede hacer de forma fiable, porque usted no tiene una manera confiable de saber cuál es el primer nombre y lo que es un apellido. Los ejemplos anteriores muestran dividir los espacios en blanco, pero que no lo hace de forma fiable.

    Si usted tiene «John Fitzgerald Kennedy», entonces es fácil. Su nombre es «Juan», el medio es «Fitzgerald» y la última es «Kennedy». No hay problema.

    Lo que si tiene «Mary Ann Summers»? Primer nombre debe ser «Mary Ann» y su apellido es «Veranos», pero la división en el espacio en blanco no sabe que. Dividir los espacios en blanco le da «María», «Ana» y «los Veranos», lo cual es incorrecto.

    En la dirección opuesta, lo que si tiene «Eddie Van Halen»? «Eddie» es el nombre de la primera, y «Van Halen» es el último nombre, pero que se rompe en el espacio en blanco le dan «Eddie», «Van» y «Halen», lo cual es incorrecto.

    Para el caso, usted podría tener «Mary Ann Van Halen», y entonces ¿qué hacer?

    Línea de base: Si no has capturado tu nombre y apellido como separar los puntos de datos, no se puede de forma fiable, los separó.

  2. 1
    SQL> select substr(customer_name1, 0, instr(customer_name1, ' ')-1) as first_name
      2       , substr(customer_name1, instr(customer_name1, ' ')+1,
      3                instr(customer_name1, ' ', -1, 1) - instr(customer_name1, ' ') - 1) as mid_name
      4       , substr(customer_name1, instr(customer_name1, ' ', -1) + 1) last_name
      5    from (select 'ALI AHMAD KHAN' customer_name1 from dual)
      6  /
    
    FIR MID_N LAST
    --- ----- ----
    ALI AHMAD KHAN

    este copes con el nombre de contar con múltiples nombres medios.

  3. 0

    Esto es un poco feo, pero va a separar cada pieza:

    with data(customer_name1) as
    (
        select 'ALI AHMAD KHAN'
        from dual
    ),
    first(firstname, customer_name1) as
    (
        select substr(customer_name1, 0, instr(customer_name1, ' ')-1) as first_name,
            ltrim(replace(customer_name1, substr(customer_name1, 0, instr(customer_name1, ' ')-1), '')) customer_name1
        from data
    ),
    middle(firstname, middlename, customer_name1) as
    (
        select firstname, 
            substr(customer_name1, 0, instr(customer_name1, ' ')-1) middlename,
            ltrim(replace(customer_name1, substr(customer_name1, 0, instr(customer_name1, ' ')-1), '')) customer_name1
         from first
    )
    select firstname, middlename, customer_name1 as LastName
    from middle

    Ver SQL Trastear con el Demo

  4. 0

    Poner -1 como las posiciones de partida y la sub cadena empezará a contar desde el final y, a continuación,

    encontrar el instr para el espacio en blanco, esperanza, ayuda

  5. 0

    Para separar el nombre, middlename, apellido de nombre completo.

    Funcionó oracle 11g. Considere la posibilidad de la tabla nombre de usuario con un campo de la llamada uname que contiene los siguientes nombres, por ejemplo.

    sachin ramesh tendulkar
    shiva sudharson s
    shiva kumar s
    shiva nandhan s
    shiva selvan s

    Dividir el nombre como nombre, middlename, apellido debajo de consulta.

    select 
    substr(uname,1, instr(uname,' ')) as firstname, 
    substr(uname, instr(uname, ' '), instr(uname, ' ', 1, 2)-instr(uname, ' ')) as middlename,
    substr(uname, instr(uname, ' ',1,2), length(uname)) as lastname from username;

    Resultado como:

    sachin   ramesh  tendulkar
    shiva    sudharson   s
    shiva    kumar   s
    shiva    nandhan     s
    shiva    selvan  s

Dejar respuesta

Please enter your comment!
Please enter your name here