FUNCION TSQL

04/08/2005 - 20:12 por Mauro | Informe spam
TENGO 2 FECHAS a y b y necesito una funcion que me devuelva los distintos
particiones añomes que existe entre las 2, ej

a/01/2005
b/06/2005

20051,20052,20053,20054,20055,20056

se que esto es algo bastante usado asi que quizas alguien tenga ya la
solucion.
gracias

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
04/08/2005 - 21:45 | Informe spam
Mauro,

Te es suficiente con que la funcion devuelva una tabla con estos valores?.
Si es asi entonces puedes usar una tabla auxiliar de numeros, siempre es muy
util tener una en la bd.

select
identity(int, 1, 1) as number
into
dbo.number
from
sysobjects as a
cross join
sysobjects as b
go

create unique clustered index ix_u_c_number_number on number(number asc)
go

create function dbo.f1 (
@sd datetime,
@ed datetime
)
returns table
as
return (
select
ltrim(year(dateadd(month, n.number - 1, @sd))) + ltrim(month(dateadd(month,
n.number - 1, @sd))) as c1
from
number as n
where
number between 1 and (datediff(month, @sd, @ed) + 1)
)
go

select
*
from
dbo.f1('20050101', '20050601')
go

drop function dbo.f1
go

drop table number
go


AMB


"Mauro" wrote:

Mostrar la cita
#2 Mauro
04/08/2005 - 21:59 | Informe spam
mm esta buena, pero que te parece esta que me hice, le faltan las variables
de entrada y salida pero la estructura es esta:

declare @from smalldatetime
declare @to smalldatetime

declare @result nvarchar(1000)
set @result=''

set @from = '2005-01-01'
set @to = '2005-03-01'

WHILE @from <> DATEADD(mm ,1, @to )
begin
set @result = @result + ltrim(str(year(@from)))+ ltrim(str(month(@from)))
if @from <> @to
set @result = @result + ','
set @FROM = DATEADD(mm ,1, @From )
end

print @result


"Alejandro Mesa" wrote in message
news:
Mostrar la cita
muy
Mostrar la cita
ltrim(month(dateadd(month,
Mostrar la cita
distintos
Mostrar la cita
#3 Alejandro Mesa
04/08/2005 - 22:35 | Informe spam
Mauro,

Si la funcion te es util no veo por que no. Mi pregunta es para que vas a
usar la cadena devuelta por la funcion?


AMB

"Mauro" wrote:

Mostrar la cita
#4 Mauro
04/08/2005 - 23:30 | Informe spam
para meterla en un IN, de todas formas hice una version que devuelve una
tabla

"Alejandro Mesa" wrote in message
news:
Mostrar la cita
variables
Mostrar la cita
ltrim(str(month(@from)))
Mostrar la cita
message
Mostrar la cita
valores?.
Mostrar la cita
es
Mostrar la cita
asc)
Mostrar la cita
la
Mostrar la cita
#5 Alejandro Mesa
05/08/2005 - 14:31 | Informe spam
Mauro,

Mostrar la cita
Creo que hicistes bien, pues ahora puedes hacer algo asi como:

select * from t1 as a inner join dbo.f1('20050101', '20050601') as b
on a.c1 = b.c1

sin necesidad de crear sql dinamico.


AMB

"Mauro" wrote:

Mostrar la cita
Ads by Google
Search Busqueda sugerida