PDA

Ver la Versión Completa : Comodines en el WHEN de un CASE.


stompy
19/11/07, 09:30:08
Hola me gustaría hacer algo tipo:

CASE var.
WHEN LIKE '*a' ...........
WHEN LIKE '*b' ...........
ENDCASE.

pero esto no funciona.

Hay alguna manera de hacer algo así?

Khira46
19/11/07, 09:53:51
Buenas,

Entiendo que lo que quieres hacer es que si tu variable acaba en 'a' se haga tal cosa y si acaba en 'b' haga otra diferente.
Si es así prueba con el operador Contains Pattern:

IF ( var CP '*a' ).
....
ELSE.
IF ( var CP '*b' ).
.....
ENDIF.
ENDIF.

No se si funcionará con un CASE, ya que creo que no se pueden utilizar expresiones lógicas con él, aunque de esto último no estoy muy segura.

Espero haber podido ayudarte.

Un saludo;)

pafú
19/11/07, 11:11:15
Yo te diría lo mismo que khira46 pero en lugar del * pondría el %.

Espero que te valga.

stompy
19/11/07, 12:38:47
Gracias a ambos, era CP.
Efectivamente con CASE no funciona. he tenido q meter un montón de IF anidados, espero q nadie vea mi código :).

Otra duda q m ha venido con la respuesta de pafú es el tema de los comodines.

Yo uso * para una cadena de caracteres y + para un solo caracter->en la mayoría de ocasiones

En cambio uso % y _ en los SELECT

Son iguales?

Hay más comodines? (he visto algo de #)

Khira46
20/11/07, 13:49:10
Hola stompy,

El símbolo # se emplea cuando buscas un caracter o una cadena de caracteres y quieres encontrarla tal cual la estás escribiendo, de forma literal, por ejemplo respetando las mayúsculas y las minúsculas, o para encontrar símbolos reservados por ejemplo #, *, %, _, etc. Por ejemplo:

*Nos creamos un parametro para introducir una cadena de caracteres
PARAMETERS: var(30).

WRITE:/2 var.
IF ( var CP '#E#S*' ). "Buscamos "ES"
WRITE:/ sy-fdpos.
ENDIF.
IF ( var CP '*##*' ). "Buscamos el propio caracter
WRITE:/ sy-fdpos.
ENDIF.

En cuanto a la diferencia entre %, *, etc. Yo utilizo el %, en los select cuando tengo datos que empiezan por un patrón determinado, %Hola, me devolvería en la select todos aquellos datos que comiencen con Hola, y el * lo utilizo con los operadores contains (only, pattenr, etc)
La verdad, es que no se si se pueden emplear de otra forma.

Un saludo