Click here to Skip to main content
15,914,943 members
Home / Discussions / Database
   

Database

 
AnswerRe: SQL SERVER Pin
Farhan Noor Qureshi11-Sep-06 18:57
Farhan Noor Qureshi11-Sep-06 18:57 
AnswerRe: SQL SERVER Pin
Colin Angus Mackay11-Sep-06 22:44
Colin Angus Mackay11-Sep-06 22:44 
QuestionHow to define a null-ignoring unique constraint Pin
supercali11-Sep-06 15:41
supercali11-Sep-06 15:41 
AnswerRe: How to define a null-ignoring unique constraint Pin
Farhan Noor Qureshi11-Sep-06 18:59
Farhan Noor Qureshi11-Sep-06 18:59 
GeneralRe: How to define a null-ignoring unique constraint Pin
supercali12-Sep-06 4:16
supercali12-Sep-06 4:16 
QuestionFinding recurring dates. Pin
T-Smooth11-Sep-06 3:06
T-Smooth11-Sep-06 3:06 
AnswerRe: Finding recurring dates. Pin
Eric Dahlvang11-Sep-06 3:50
Eric Dahlvang11-Sep-06 3:50 
GeneralRe: Finding recurring dates. Pin
T-Smooth11-Sep-06 5:48
T-Smooth11-Sep-06 5:48 
I generated the calendar using scripts taken from this FAQ. Search the pdf for "calendar table" and it should take you to the right FAQ question. There are scripts to add in all of the holidays as well. You first need to create a numbers table with a sufficient amount of numbers in there as well.

http://www.aspfaq.com/downloads/ASPFAQ-2006-04-18.pdf[^]

Here's the scripts if you don't want to look at the pdf. It will give you a table consisting of 30 years starting with 01/01/2000:
<br />
CREATE TABLE dbo.Numbers<br />
(<br />
Number INT IDENTITY(1,1) PRIMARY KEY CLUSTERED<br />
)<br />
WHILE COALESCE(SCOPE_IDENTITY(), 0) <= 20000<br />
BEGIN<br />
INSERT dbo.Numbers DEFAULT VALUES<br />
END<br />
GO<br />
<br />
<br />
<br />
CREATE TABLE dbo.Calendar<br />
(<br />
dt SMALLDATETIME NOT NULL<br />
PRIMARY KEY CLUSTERED,<br />
isWeekday BIT,<br />
isHoliday BIT,<br />
Y SMALLINT,<br />
FY SMALLINT,<br />
Q TINYINT,<br />
M TINYINT,<br />
D TINYINT,<br />
DW TINYINT,<br />
monthname VARCHAR(9),<br />
dayname VARCHAR(9),<br />
W TINYINT<br />
)<br />
GO<br />
<br />
INSERT Calendar(dt)<br />
SELECT DATEADD(DAY, Number, '20000101')<br />
FROM dbo.Numbers<br />
WHERE Number <= 10957<br />
ORDER BY Number<br />
GO<br />
<br />
UPDATE dbo.Calendar SET<br />
isWeekday = CASE<br />
WHEN DATEPART(DW, dt) IN (1,7)<br />
THEN 0<br />
ELSE 1 END,<br />
isHoliday = 0,<br />
Y = YEAR(dt),<br />
FY = YEAR(dt),<br />
/*<br />
-- if our fiscal year<br />
-- starts on May 1st:<br />
FY = CASE<br />
WHEN MONTH(dt) < 5<br />
THEN YEAR(dt)-1<br />
ELSE YEAR(dt) END,<br />
*/<br />
Q = CASE<br />
WHEN MONTH(dt) <= 3 THEN 1<br />
WHEN MONTH(dt) <= 6 THEN 2<br />
WHEN MONTH(dt) <= 9 THEN 3<br />
ELSE 4 END,<br />
M = MONTH(dt),<br />
D = DAY(dt),<br />
DW = DATEPART(DW, dt),<br />
monthname = DATENAME(MONTH, dt),<br />
dayname = DATENAME(DW, dt),<br />
W = DATEPART(WK, dt)<br />
GO<br />
<br />
ALTER TABLE dbo.Calendar ADD UTCOffset TINYINT NULL<br />
GO<br />
<br />
SET NOCOUNT ON<br />
DECLARE @dt SMALLDATETIME<br />
DECLARE @offset TINYINT<br />
SET @offset = 5<br />
DECLARE c CURSOR<br />
LOCAL STATIC READ_ONLY FOR<br />
SELECT dt FROM dbo.Calendar ORDER BY dt<br />
OPEN c<br />
FETCH NEXT FROM c INTO @dt<br />
WHILE @@FETCH_STATUS = 0<br />
BEGIN<br />
IF DATENAME(dw, @dt)='Sunday'<br />
AND DATEPART(DAY, @dt) <= 7<br />
AND DATENAME(MONTH, @dt) = 'April'<br />
SET @offset = 4<br />
IF DATENAME(dw, @dt)='Sunday'<br />
AND DATEPART(DAY, @dt) >= 25<br />
AND DATENAME(MONTH, @dt) = 'October'<br />
SET @offset = 5<br />
UPDATE dbo.Calendar SET UTCOffset = @offset WHERE dt = @dt<br />
FETCH NEXT FROM c INTO @dt<br />
END<br />
CLOSE c<br />
DEALLOCATE c<br />
GO<br />
<br />
CREATE FUNCTION dbo.ISOWeek<br />
(<br />
@dt SMALLDATETIME<br />
)<br />
RETURNS TINYINT<br />
AS<br />
BEGIN<br />
DECLARE @ISOweek TINYINT<br />
SET @ISOweek = DATEPART(WEEK,@dt)+1<br />
-DATEPART(WEEK,RTRIM(YEAR(@dt))+'0104')<br />
IF @ISOweek = 0<br />
BEGIN<br />
SET @ISOweek = dbo.ISOweek<br />
(<br />
RTRIM(YEAR(@dt)-1)+'12'+RTRIM(24+DAY(@dt))<br />
) + 1<br />
END<br />
IF MONTH(@dt) = 12 AND DAY(@dt)-DATEPART(DW,@dt) >= 28<br />
BEGIN<br />
SET @ISOweek=1<br />
END<br />
RETURN(@ISOweek)<br />
END<br />
GO<br />
<br />
UPDATE Calendar SET W = dbo.ISOWeek(dt)<br />
GO<br />
<br />
ALTER TABLE Calendar ADD HolidayDescription VARCHAR(32)<br />
GO<br />
<br />
-- New Year's Day - easy<br />
UPDATE Calendar<br />
SET<br />
isHoliday = 1,<br />
HolidayDescription = 'New Years'' Day'<br />
WHERE M = 1<br />
AND D = 1<br />
GO<br />
<br />
-- Memorial Day - last Monday in May<br />
UPDATE Calendar<br />
SET<br />
isHoliday = 1,<br />
HolidayDescription = 'Memorial Day'<br />
FROM Calendar c1<br />
WHERE M = 5<br />
AND DW = 2<br />
AND NOT EXISTS (SELECT 1 FROM Calendar c2<br />
WHERE M = 5 AND DW = 2<br />
AND c2.Y = c1.Y<br />
AND c2.dt > c1.dt)<br />
GO<br />
<br />
-- Labor Day - first Monday in September<br />
UPDATE Calendar<br />
SET<br />
isHoliday = 1,<br />
HolidayDescription = 'Labor Day'<br />
FROM Calendar c1<br />
WHERE M = 9<br />
AND DW = 2<br />
AND NOT EXISTS (SELECT 1 FROM Calendar c2<br />
WHERE M = 9 AND DW = 2<br />
AND c2.Y = c1.Y<br />
AND c2.dt < c1.dt)<br />
GO<br />
<br />
-- Thanksgiving Thursday - 4th Thursday in November<br />
UPDATE Calendar<br />
SET<br />
isHoliday = 1,<br />
HolidayDescription = 'Thanksgiving Thursday'<br />
FROM Calendar c1<br />
WHERE M = 11<br />
AND DW = 5<br />
AND (SELECT COUNT(*) FROM Calendar c2<br />
WHERE M = 11 AND DW = 5<br />
AND c2.Y = c1.Y<br />
AND c2.dt < c1.dt) = 3<br />
GO<br />
<br />
-- Traditionally, Thanksgiving Friday, as well<br />
-- as long as you haven't pre-configured any<br />
-- other Thursday in November to be isHoliday<br />
UPDATE Calendar<br />
SET<br />
isHoliday = 1,<br />
HolidayDescription = 'Thanksgiving Friday'<br />
FROM Calendar c1<br />
WHERE M = 11<br />
AND DW = 6<br />
AND EXISTS (SELECT 1 FROM Calendar c2<br />
WHERE M = 11 AND DW = 5<br />
AND c2.dt = (c1.dt - 1)<br />
AND c2.Y = c1.Y<br />
AND isHoliday = 1)<br />
GO<br />
<br />
-- Veterans' Day - easy<br />
-- however do this AFTER Thanksgiving calculation<br />
-- in case it happens to fall on a Thursday<br />
UPDATE Calendar<br />
SET<br />
isHoliday = 1,<br />
HolidayDescription = 'Veterans'' Day'<br />
WHERE M = 11 AND D = 11<br />
GO<br />
<br />
-- Christmas Day - easy<br />
UPDATE Calendar<br />
SET<br />
isHoliday = 1,<br />
HolidayDescription = 'Christmas Day'<br />
WHERE M = 12<br />
AND D = 25<br />
GO<br />
<br />
CREATE FUNCTION dbo.GetEasterSunday<br />
(<br />
@Y INT<br />
)<br />
RETURNS SMALLDATETIME<br />
AS<br />
BEGIN<br />
DECLARE @EpactCalc INT,<br />
@PaschalDaysCalc INT,<br />
@NumOfDaysToSunday INT,<br />
@EasterMonth INT,<br />
@EasterDay INT<br />
SET @EpactCalc = (24 + 19 * (@Y % 19)) % 30<br />
SET @PaschalDaysCalc = @EpactCalc - (@EpactCalc / 28)<br />
SET @NumOfDaysToSunday = @PaschalDaysCalc - (<br />
(@Y + @Y / 4 + @PaschalDaysCalc - 13) % 7<br />
)<br />
SET @EasterMonth = 3 + (@NumOfDaysToSunday + 40) / 44<br />
SET @EasterDay = @NumOfDaysToSunday + 28 - (<br />
31 * (@EasterMonth / 4)<br />
)<br />
RETURN<br />
(<br />
SELECT CONVERT<br />
(<br />
SMALLDATETIME,<br />
RTRIM(@Y)<br />
+ RIGHT('0'+RTRIM(@EasterMonth), 2)<br />
+ RIGHT('0'+RTRIM(@EasterDay), 2)<br />
)<br />
)<br />
END<br />
GO<br />
<br />
CREATE FUNCTION dbo.GetEasterMonday<br />
(<br />
@Y INT<br />
)<br />
RETURNS SMALLDATETIME<br />
AS<br />
BEGIN<br />
RETURN (SELECT dbo.GetEasterSunday(@Y) + 1)<br />
END<br />
GO<br />
CREATE FUNCTION dbo.GetGoodFriday<br />
(<br />
@Y INT<br />
)<br />
RETURNS SMALLDATETIME<br />
AS<br />
BEGIN<br />
RETURN (SELECT dbo.GetEasterSunday(@Y) - 2)<br />
END<br />
GO<br />
<br />
UPDATE Calendar<br />
SET<br />
isHoliday = 1,<br />
HolidayDescription = 'Good Friday'<br />
WHERE dt = dbo.GetGoodFriday(Y)<br />
GO<br />
<br />
UPDATE Calendar<br />
SET<br />
isHoliday = 1,<br />
HolidayDescription = 'Easter Monday'<br />
WHERE dt = dbo.GetEasterMonday(Y)<br />
GO<br />

AnswerRe: Finding recurring dates. Pin
Eric Dahlvang11-Sep-06 6:42
Eric Dahlvang11-Sep-06 6:42 
GeneralRe: Finding recurring dates. Pin
T-Smooth11-Sep-06 8:24
T-Smooth11-Sep-06 8:24 
GeneralRe: Finding recurring dates. Pin
Eric Dahlvang11-Sep-06 10:19
Eric Dahlvang11-Sep-06 10:19 
AnswerRe: Finding recurring dates. Pin
Michael Potter11-Sep-06 10:20
Michael Potter11-Sep-06 10:20 
GeneralRe: Finding recurring dates. Pin
Eric Dahlvang11-Sep-06 10:55
Eric Dahlvang11-Sep-06 10:55 
QuestionCondition as parameter of sp ... ? [modified] Pin
devboycpp10-Sep-06 23:22
devboycpp10-Sep-06 23:22 
AnswerRe: Condition as parameter of sp ... ? Pin
_AK_10-Sep-06 23:29
_AK_10-Sep-06 23:29 
GeneralRe: Condition as parameter of sp ... ? [modified] Pin
devboycpp10-Sep-06 23:38
devboycpp10-Sep-06 23:38 
GeneralRe: Condition as parameter of sp ... ? Pin
_AK_10-Sep-06 23:55
_AK_10-Sep-06 23:55 
GeneralRe: Condition as parameter of sp ... ? Pin
devboycpp11-Sep-06 0:24
devboycpp11-Sep-06 0:24 
GeneralRe: Condition as parameter of sp ... ? Pin
_AK_11-Sep-06 0:33
_AK_11-Sep-06 0:33 
AnswerRe: Condition as parameter of sp ... ? Pin
Eric Dahlvang11-Sep-06 3:08
Eric Dahlvang11-Sep-06 3:08 
QuestionNavigation buttons Pin
Ranjita Ghosh10-Sep-06 21:41
Ranjita Ghosh10-Sep-06 21:41 
AnswerRe: Navigation buttons Pin
Tushar Kothari11-Sep-06 1:06
Tushar Kothari11-Sep-06 1:06 
GeneralRe: Navigation buttons Pin
Ranjita Ghosh11-Sep-06 1:48
Ranjita Ghosh11-Sep-06 1:48 
QuestionCatching errors raised by SP Pin
Uma Kameswari10-Sep-06 21:40
Uma Kameswari10-Sep-06 21:40 
AnswerRe: Catching errors raised by SP Pin
Tushar Kothari11-Sep-06 1:10
Tushar Kothari11-Sep-06 1:10 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.