Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Formatear y concatenar salida de datos (https://www.clubdelphi.com/foros/showthread.php?t=18595)

RyAr 17-02-2005 12:41:37

Formatear y concatenar salida de datos
 
Buenas,

Tengo una tabla en SQL Server en la cual estan usuarios, y un numero de socio, con esta estructura:

Código SQL [-]
select Usr_Nombre, Usr_TarjetaA, Usr_TarjetaB, Usr_TarjetaC, Usr_TarjetaD from tbl_Usuarios;

Por ejemplo devolveria estos datos: "Juan", 2125, 1458, 238, 11

Me gustaria que la consulta me devolviera lo siguiente: "Juan", "2125 1458 0238 0011"

Es decir, me gustaria lo primero formatear los campos Usr_TarjetaA, Usr_TarjetaB, Usr_TarjetaC, Usr_TarjetaD para que se completaran con 0 hasta las 4 cifras, despues pasarlo a texto para poderlos concatenar dejando un espacio entre ambos, devolviendo lo que seria un numero de socio con el formato de una tarjeta de credito.

¿¿¿Alguien me ayuda con esta consulta???.

Saludos, y mil gracias por adelantado.

Gydba 17-02-2005 12:49:26

Hola,

Te podemos ayudar, nada más que no especificas que motor de BD estás utilizando. Considerá que dependiendo el motor es la forma en que se armará la sentencia SQL, y no todos soportan lo mismo.

Saludos!

RyAr 17-02-2005 12:57:33

Ayyy, digo todas especificaciones y se me olvida el motor :eek: desde luego donde tengo la cabeza. Es SQL Server, perdonar el olvidoooo.

Saludos

Gydba 17-02-2005 16:46:18

Hola,

No soy bueno con el SQL Server, pero algo así sería la idea:
Código SQL [-]
SELECT 
  Usr_Nombre, 
  (Replicate('0', 4 - Len(Usr_TarjetaA)) + Usr_TarjetaA + ' ') +
  (Replicate('0', 4 - Len(Usr_TarjetaB)) + Usr_TarjetaB + ' ') +
  (Replicate('0', 4 - Len(Usr_TarjetaC)) + Usr_TarjetaC + ' ') +
  (Replicate('0', 4 - Len(Usr_TarjetaD)) + Usr_TarjetaD + ' ') 
FROM tbl_Usuarios
A lo mejor tendrías que hacer un CAST por el tipo de datos, puesto que deberían ser de tipo string para que te funcione el Len.

Quizás con una SP se simplifique la repetición, pero bueno, es lo más rápido que te puedo hacer.

Saludos!

RyAr 18-02-2005 14:01:36

Buenas y gracias!!!

Segui tus consejos y al final la consulta ha quedado de esta manera por si alguien la quiere:

Código SQL [-]
SELECT 
  Usr_Nombre, 
  CAST(REPLICATE('0', 4 - { fn LENGTH(Usr_TarjetaA) }) AS varchar) + CAST(Usr_TarjetaA AS varchar) + ' ' + 
  CAST(REPLICATE('0', 4 - { fn LENGTH(Usr_TarjetaB) }) AS varchar) + CAST(Usr_TarjetaB AS varchar) + ' ' + 
  CAST(REPLICATE('0', 4 - { fn LENGTH(Usr_TarjetaC) }) AS varchar) + CAST(Usr_TarjetaC AS varchar) + ' ' + 
  CAST(REPLICATE('0', 4 - { fn LENGTH(Usr_TarjetaD) }) AS varchar) + CAST(Usr_TarjetaD AS varchar) AS Usr_NumeroTarjeta, 
  FROM 
  tbl_Usuarios ;

Gracias por todo!!


La franja horaria es GMT +2. Ahora son las 15:05:42.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi