Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Devolver un parametro en una variable y hacer un select

Estas en el tema de Devolver un parametro en una variable y hacer un select en el foro de SQL Server en Foros del Web. Preciso, un procedimiento o función...esa es la preg... que haga lo siguiente.. que le de un string, y un largo...entonces esta función o procedure tiene ...
  #1 (permalink)  
Antiguo 02/05/2007, 13:05
 
Fecha de Ingreso: febrero-2007
Mensajes: 182
Antigüedad: 17 años, 3 meses
Puntos: 0
Devolver un parametro en una variable y hacer un select

Preciso, un procedimiento o función...esa es la preg...
que haga lo siguiente..
que le de un string, y un largo...entonces esta función o procedure
tiene que hacer un select del string hasta el largo..y devolver en una variable (output) el resto
por ej
le doy "este es un string", y largo 3
entonces que me haga un select de "est", es decir las primeras 3 letras
y además que me devuelva en una variable @resto el string que sobra
en este caso sería "e es un string"

el tema, es:
Se puede realizar un select con un return a la vez???
porque un select es de un procedure, y un return de una function
en caso de que se pueda, cual elejir?
gracias
Martín
  #2 (permalink)  
Antiguo 02/05/2007, 13:38
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 5 meses
Puntos: 38
Re: Devolver un parametro en una variable y hacer un select

Código:
Declare @cadena varchar(100), @largo int

Select @cadena = 'este es un string', @largo = 3

Select left(@Cadena, @largo), right(@cadena, len(@cadena) - @largo)
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #3 (permalink)  
Antiguo 02/05/2007, 13:51
 
Fecha de Ingreso: febrero-2007
Mensajes: 182
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: Devolver un parametro en una variable y hacer un select

estoy de acuerdo con el código que publicaste..
lo que no sé es como hacer el resto,aunque esa no era la preggunta

la pregunta era la siguiente:

Cómo devolver ese resto, es decir le pongo @resto output
y además quiero que me devuelva un select, lo que voy a hacer ya sea un procedure o una function

Gracias por responder
un abrazo
Martin
  #4 (permalink)  
Antiguo 02/05/2007, 15:12
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Re: Devolver un parametro en una variable y hacer un select

Una función escalar solo devuelve un solo valor. A menos que pienses en funciones que devuelvan tablas, que en efectos prácticos es muy similar al SP.

El si usas uno u otro dependerá de la manera en que pienses utilizarla.
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #5 (permalink)  
Antiguo 02/05/2007, 15:25
 
Fecha de Ingreso: febrero-2007
Mensajes: 182
Antigüedad: 17 años, 3 meses
Puntos: 0
devolver string de un largo y string de lo que sobra

BEGIN


set @txtacotado = LEFT(dbo.TRIM (ISNULL(@Texto,'') ), @Largo) + REPLICATE(' ',@Largo - datalength(LEFT( dbo.TRIM(isNull( @Texto,'' ) ),@Largo ) ) )

eso lo hago para convertir @texto en un string de largo @largo

me anda bien,
alguien me puede ayudar en como hacer para poner en un @resto
el string que sobra en el caso que @largo sea más chico que el largo de @texto
  #6 (permalink)  
Antiguo 02/05/2007, 16:00
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Re: Devolver un parametro en una variable y hacer un select

Uní tu pregunta a la anterior para tener un conexto de qué necesitas.

¿Por qué la sugerencia de Andres no te sirve? Según lo que comentas que necesitas es perfectamente útil.
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #7 (permalink)  
Antiguo 02/05/2007, 16:10
 
Fecha de Ingreso: febrero-2007
Mensajes: 182
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: Devolver un parametro en una variable y hacer un select

tenés razón anda brillante...
salvo el tema de los espacios en blanco,
la había probado y no me andaba bien, por eso volví a postear

por ejemplo si le daba la cadena '12345 '
con todos esos espacios en blanco, y hacia la funcion en la query con esa cadena y laro 3 por ej

me aparecia como retorno:
para la cadena de largo 3 : 123 (que es correcto)
y vacio para el resto que es incorrecto ya que tendría que ser 45

lo arreglaré con trim estos temas
gracias por todo, me han sido de gran ayuda, para estos casos técnicos
Un abrazo
Martín
  #8 (permalink)  
Antiguo 02/05/2007, 16:23
 
Fecha de Ingreso: febrero-2007
Mensajes: 182
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: Devolver un parametro en una variable y hacer un select

teminé con mi procedure...les dejo la solución ya que han sido de gran ayuda, por si la precisan algún día



CREATE PROCEDURE CadyResto

@Texto varchar(100),@Tipo Char(1),@Largo int,@txtAcotado varchar(100) output,
@txtresto varchar(100) output
AS
set nocount on

--@Texto varchar(100), texto a formatear
--@Tipo Char(1), N=numero , C=char
--@Largo int largo a paddear
--@txtAcotado varchar(100) String de @texto acotado por el largo @largo
--@txtresto varchar(100) String de @texto, excluido por el largo @largo
----------
BEGIN
/*
Procedimiento que hace el trim de un string y lo rellena con ceros o espacios en caso de ser su largo menor que @largo, y
devuelve en la variable @resto el string "desechado" en caso de ser el largo mayor a @largo
*/

--chequeo que el parametro no sea nulo
Set @Texto= ISNULL(@Texto,'')

--chequeo que el largo sea correcto
IF @Largo<0 set @Largo=0

IF @Tipo='N'
BEGIN
--Tipo numerico lo completo con 0
set @txtacotado = REPLICATE('0', @Largo - datalength(dbo.Trim(isNull( @Texto,''))) ) + dbo.TRIM(@Texto)
END
ELSE
BEGIN
--Tipo caracter lo completo con ' '

set @txtacotado= LEFT(DBO.TRIM(ISNULL(@Texto,'')), @largo)
-- +REPLICATE(' ',@Largo - datalength(LEFT( dbo.TRIM(isNull( @Texto,'' ) ),@Largo ) ) )

set @txtresto = RIGHT(DBO.TRIM(ISNULL(@Texto,'')), len(DBO.TRIM(@Texto)) - @largo)


-- set @txtacotado = LEFT(dbo.TRIM (ISNULL(@Texto,'') ), @Largo) + REPLICATE(' ',@Largo - datalength(LEFT( dbo.TRIM(isNull( @Texto,'' ) ),@Largo ) ) )
-- set @txtresto = RIGHT(dbo.TRIM (ISNULL(@Texto,'') ), datalength(@texto)-@Largo) + REPLICATE(' ',160 - datalength(LEFT( dbo.TRIM(isNull( @Texto,'' ) ),160 ) ) )
END




--select @txtAcotado




END
GO

//////////
Martin
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:36.