SQL - Consulta Switch-Case

 
Vista:

Consulta Switch-Case

Publicado por Jose Altuve (3 intervenciones) el 06/11/2017 13:39:46
buenas, les hago una consulta.
tengo el siguiente código del cual quiero hacer un Select en SQL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
switch (Svariable.Substring(i, 1))
{
    case "A":
    {
        aux += "30";
        break;
    }
    case "B":
    {
        aux += "31";
        break;
    }
    case "C":
    {
        aux += "32";
        break;
    }

Lo que estoy intentando de hacer es por ejemplo si tengo una variable ABC123, el SELECT me devuelva 303132123.
me podrían dar una mano?
desde ya muchas gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Consulta Switch-Case

Publicado por leonardo_josue (1173 intervenciones) el 06/11/2017 16:50:21
Hola Jose Altuve:

En ocasiones, no es conveniente tratar de "copiar" funcionalidad de algún lenguaje de programación a SQL, ya que trabajan de maneras muy distintas. Pero OJO, esto no quiere decir que no se pueda hacer, simplemente es que con SQL se pueden hacer de maneras distintas.

Ahora, antes de darte alguna respuesta puntual, deberías de decirnos con qué motor de BD's estás trabajando. (Como dijo Isaías alguna vez, este dato debería de ser obligatorio O_o). Esto es muy importante, ya que cada motor de BD's maneja una sintaxis distinta por lo tanto no hay una "única" manera de hacerlo. Para lo que planteas, y utilizando por ejemplo MySQL, podrías optar por una alternativa distinta al CASE-WHEN (que es el equivalente al SWITCH de programación) y utilizar por ejemplo la función REPLACE:

La función REPLACE, busca una subcadena dentro de una cadena y reemplaza cada aparición por otra subcadena:

1
2
3
4
5
6
7
8
9
10
11
mysql> SELECT
    ->   @variable,
    ->   REPLACE(@variable, "A", "30"),
    ->   REPLACE(@variable, "B", "31"),
    ->   REPLACE(@variable, "C", "32");
+-----------+-------------------------------+-------------------------------+-------------------------------+
| @variable | REPLACE(@variable, "A", "30") | REPLACE(@variable, "B", "31") | REPLACE(@variable, "C", "32") |
+-----------+-------------------------------+-------------------------------+-------------------------------+
| ABC123    | 30BC123                       | A31C123                       | AB32123                       |
+-----------+-------------------------------+-------------------------------+-------------------------------+
1 row in set (0.00 sec)

De tal suerte, que para tu caso, si quieres cambiar tu SUBCADENA "ABC" podrías hacer esto:

1
2
3
4
5
6
7
8
9
mysql>   SELECT
    ->   @variable,
    ->   REPLACE(@variable, "ABC", "303132") reemplazo;
+-----------+-----------+
| @variable | reemplazo |
+-----------+-----------+
| ABC123    | 303132123 |
+-----------+-----------+
1 row in set (0.00 sec)

O, si quisieras hacerlo letra por letra, podrías anidar las funciones así:

1
2
3
4
5
6
7
8
9
mysql> SELECT
    ->   @variable,
    ->   REPLACE(REPLACE(REPLACE(@variable, "C", "32"), "B", "31"), "A", "30") reemplazo;
+-----------+-----------+
| @variable | reemplazo |
+-----------+-----------+
| ABC123    | 303132123 |
+-----------+-----------+
1 row in set (0.00 sec)

En ambos casos llegarías al mismo resultado. Si no utilizas MySQL , sería cuestión de encontrar una función equivalente en ti DBMS.

Haz la prueba y nos comentas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consulta Switch-Case

Publicado por Jose Altuve (3 intervenciones) el 06/11/2017 19:30:30
Hola Leo, primeramente gracias por tu respuesta
mi intención no era copiarme la funcionalidad del código sino trasladar esa parte del código a una consulta en SQL
para subirlo posteriormente a un SSRS
estoy usando SqL Server, mi idea era recorrer con un while desde la A~Z
usando tal y como decís el Case-When
como describí anteriormente
a=30
b=31
C=32.... y así sucesivamente hasta la Z

mas en concreto.. si quisiera leer un modelo de un Articulo que sea "CAB1540" que se traduzca en "3230311540"

desde ya muchas gracias por su tiempo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Consulta Switch-Case

Publicado por leonardo_josue (1173 intervenciones) el 06/11/2017 20:26:31
Hola de nuevo Jose Altuve:

Para implementar lo que comentas, en una consulta SQL, será harto complicado. Una alternativa que tienes sería utilizar FUNCIONES para definir esta funcionalidad... con Transact-SQL puedes hacer uso de ciclos para hacer iterativo este proceso, tal como lo haces con un lenguaje de programación.

Investiga un poco acerca de PATINDEX y cómo reemplazar valores con expresiones regulares en SQL server. creo que encontrarás ejemplos que te puedan servir.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consulta Switch-Case

Publicado por Jose (3 intervenciones) el 06/11/2017 20:31:53
Genial lo voy a investigar, gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar