http://www.ubitsoft.com/products/t-sql-beautifier/
http://www.sqlinform.com/online.phtml
http://www.dpriver.com/pp/sqlformat.htm
sql assistant (best)
Thursday, September 9, 2010
Wednesday, September 8, 2010
sql tables
IF OBJECT_ID('tempdb..#reporte') IS NULL
BEGIN
CREATE TABLE #reporte
(
tra_tot INT,
ing_tot FLOAT,
hor_tra FLOAT,
hor_ext FLOAT
)
END
DECLARE @lt_trabajadores TABLE (
trabajador CHAR(10),
registro_fiscal VARCHAR(20),
nombre VARCHAR(100),
clave_unica VARCHAR(25),
fecha_baja VARCHAR(40),
concepto SMALLINT,
importe DECIMAL
)
Otros archivos de interés:
Leer 1
Leer 2
Friday, September 3, 2010
T SQL - usar otra bd en tiempo de ejecucion
-- FROM PUNKUADAM.dbo.trabajadores t
-- INNER JOIN punkuadam.dbo.vw_nombre_separado vns
-- ON vns.trabajador = t.trabajador
-- INNER JOIN punkuadam.dbo.transacciones_ns tn
-- ON tn.trabajador = t.trabajador
-- INNER JOIN punkuadam.dbo.transacciones_ns tn2
-- ON tn2.trabajador = t.trabajador
-- INNER JOIN punkuadam.dbo.plazas p
-- ON p.trabajador = t.trabajador
-- INNER JOIN punkuadam.dbo.puestos p2
-- ON p.puesto = p2.puesto
-- INNER JOIN punkuadam.dbo.vw_nombre_separado vns
-- ON vns.trabajador = t.trabajador
-- INNER JOIN punkuadam.dbo.transacciones_ns tn
-- ON tn.trabajador = t.trabajador
-- INNER JOIN punkuadam.dbo.transacciones_ns tn2
-- ON tn2.trabajador = t.trabajador
-- INNER JOIN punkuadam.dbo.plazas p
-- ON p.trabajador = t.trabajador
-- INNER JOIN punkuadam.dbo.puestos p2
-- ON p.puesto = p2.puesto
Wednesday, September 1, 2010
Obtener Numero lunes, Martes, miercoles en un rango de fechas
DECLARE @pd_inicio AS SMALLDATETIME,
@pd_fin AS SMALLDATETIME,
@pn_dia AS SMALLINT
DECLARE @ln_total AS SMALLINT
DECLARE @ln_datepart AS SMALLINT
SET @ln_total = 0
SET @pd_inicio = '20100601'
SET @pd_fin = '20100630'
SET @pn_dia = 7 -- 1 lunes
PRINT @pn_dia
PRINT DATEPART(dw, @pd_inicio)
SET @ln_datepart = DATEPART(dw, @pd_inicio)
IF @pn_dia < DATEPART(dw, @pd_inicio)
SET @pd_inicio = DATEADD(week, DATEDIFF(week, 0, @pd_inicio), 6 + @pn_dia)
ELSE
IF @pn_dia > DATEPART(dw, @pd_inicio)
SET @pd_fin = @pd_fin - (@pn_dia - DATEPART(dw, @pd_inicio))
-- SET @pd_inicio = DATEADD(
-- week,
-- DATEDIFF(week, 0, @pd_inicio),
-- @pn_dia - DATEPART(dw, @pd_inicio)
-- )
IF @ln_datepart = 7 AND @pn_dia <> 7--funciona en agosto 2010
SET @pd_inicio = DATEADD(d, -7, @pd_inicio)
WHILE @pd_inicio <= @pd_fin
BEGIN
PRINT @pd_inicio
SET @pd_inicio = DATEADD(d, 7, @pd_inicio)
SET @ln_total = @ln_total + 1
END
SELECT @ln_total
--fucnion origginal con 7 devuelve el sig lunes
--select dateadd(week, datediff(week, 0, getdate()),7)
---------------------------------------------------
DROP FUNCTION fn_hrv5_ec_get_numero_dias
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION fn_hrv5_ec_get_numero_dias
(
@pd_inicio AS SMALLDATETIME,
@pd_fin AS SMALLDATETIME,
@pn_dia AS SMALLINT --dia de la semana -- lunes = 1
)
RETURNS SMALLINT
AS
BEGIN
DECLARE @offset INT,
@total_dias AS SMALLINT
SELECT @offset = CASE @pn_dia
WHEN 1 THEN 1
WHEN 2 THEN 2
WHEN 3 THEN 3
WHEN 4 THEN 4
WHEN 5 THEN 5
WHEN 6 THEN 6
WHEN 7 THEN 0
END
SET @total_dias = DATEDIFF(
WEEK,
DATEADD(DAY, -@offset, @pd_inicio),
DATEADD(DAY, -@offset, @pd_fin)
)
IF @pn_dia = DATEPART(dw, @pd_inicio)
SET @total_dias = @total_dias + 1
RETURN @total_dias
END
GO
DECLARE @ld_inicio AS SMALLDATETIME
DECLARE @ld_fin AS SMALLDATETIME
SET @ld_inicio = '20100601'
SET @ld_fin = '20100630'
SELECT dbo.fn_hrv5_ec_get_numero_dias(@ld_inicio, @ld_fin, 7),
dbo.fn_hrv5_ec_get_numero_dias(@ld_inicio, @ld_fin, 1),
dbo.fn_hrv5_ec_get_numero_dias(@ld_inicio, @ld_fin, 2),
dbo.fn_hrv5_ec_get_numero_dias(@ld_inicio, @ld_fin, 3),
dbo.fn_hrv5_ec_get_numero_dias(@ld_inicio, @ld_fin, 4),
dbo.fn_hrv5_ec_get_numero_dias(@ld_inicio, @ld_fin, 5),
dbo.fn_hrv5_ec_get_numero_dias(@ld_inicio, @ld_fin, 6)
@pd_fin AS SMALLDATETIME,
@pn_dia AS SMALLINT
DECLARE @ln_total AS SMALLINT
DECLARE @ln_datepart AS SMALLINT
SET @ln_total = 0
SET @pd_inicio = '20100601'
SET @pd_fin = '20100630'
SET @pn_dia = 7 -- 1 lunes
PRINT @pn_dia
PRINT DATEPART(dw, @pd_inicio)
SET @ln_datepart = DATEPART(dw, @pd_inicio)
IF @pn_dia < DATEPART(dw, @pd_inicio)
SET @pd_inicio = DATEADD(week, DATEDIFF(week, 0, @pd_inicio), 6 + @pn_dia)
ELSE
IF @pn_dia > DATEPART(dw, @pd_inicio)
SET @pd_fin = @pd_fin - (@pn_dia - DATEPART(dw, @pd_inicio))
-- SET @pd_inicio = DATEADD(
-- week,
-- DATEDIFF(week, 0, @pd_inicio),
-- @pn_dia - DATEPART(dw, @pd_inicio)
-- )
IF @ln_datepart = 7 AND @pn_dia <> 7--funciona en agosto 2010
SET @pd_inicio = DATEADD(d, -7, @pd_inicio)
WHILE @pd_inicio <= @pd_fin
BEGIN
PRINT @pd_inicio
SET @pd_inicio = DATEADD(d, 7, @pd_inicio)
SET @ln_total = @ln_total + 1
END
SELECT @ln_total
--fucnion origginal con 7 devuelve el sig lunes
--select dateadd(week, datediff(week, 0, getdate()),7)
---------------------------------------------------
OTRA FUNCION
IF OBJECT_ID('fn_hrv5_ec_get_numero_dias') IS NOT NULLDROP FUNCTION fn_hrv5_ec_get_numero_dias
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION fn_hrv5_ec_get_numero_dias
(
@pd_inicio AS SMALLDATETIME,
@pd_fin AS SMALLDATETIME,
@pn_dia AS SMALLINT --dia de la semana -- lunes = 1
)
RETURNS SMALLINT
AS
BEGIN
DECLARE @offset INT,
@total_dias AS SMALLINT
SELECT @offset = CASE @pn_dia
WHEN 1 THEN 1
WHEN 2 THEN 2
WHEN 3 THEN 3
WHEN 4 THEN 4
WHEN 5 THEN 5
WHEN 6 THEN 6
WHEN 7 THEN 0
END
SET @total_dias = DATEDIFF(
WEEK,
DATEADD(DAY, -@offset, @pd_inicio),
DATEADD(DAY, -@offset, @pd_fin)
)
IF @pn_dia = DATEPART(dw, @pd_inicio)
SET @total_dias = @total_dias + 1
RETURN @total_dias
END
GO
DECLARE @ld_inicio AS SMALLDATETIME
DECLARE @ld_fin AS SMALLDATETIME
SET @ld_inicio = '20100601'
SET @ld_fin = '20100630'
SELECT dbo.fn_hrv5_ec_get_numero_dias(@ld_inicio, @ld_fin, 7),
dbo.fn_hrv5_ec_get_numero_dias(@ld_inicio, @ld_fin, 1),
dbo.fn_hrv5_ec_get_numero_dias(@ld_inicio, @ld_fin, 2),
dbo.fn_hrv5_ec_get_numero_dias(@ld_inicio, @ld_fin, 3),
dbo.fn_hrv5_ec_get_numero_dias(@ld_inicio, @ld_fin, 4),
dbo.fn_hrv5_ec_get_numero_dias(@ld_inicio, @ld_fin, 5),
dbo.fn_hrv5_ec_get_numero_dias(@ld_inicio, @ld_fin, 6)
revisar
http://sqlserver2000.databases.aspfaq.com/why-should-i-consider-using-an-auxiliary-calendar-table.html
Subscribe to:
Posts (Atom)