---
title: "TSQL: UDF som returnerar första/sista dagen i veckan, månaden m.m."
type: "forum-thread"
url: "https://www.webforum.nu/amne/programmering/123045-tsql-udf-som-returnerar-första-sista-dagen-i-veckan-månaden-m-m"
topic: "Programmering"
topic_url: "https://www.webforum.nu/amne/programmering"
author: "doggelito"
published: "2005-02-22T16:59:15.000Z"
updated: "2005-02-22T16:59:15.000Z"
replies: 0
views: 3550
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/programmering/123045-tsql-udf-som-returnerar-första-sista-dagen-i-veckan-månaden-m-m"
---

# TSQL: UDF som returnerar första/sista dagen i veckan, månaden m.m.

## #1 — doggelito, 2005-02-22T16:59Z

En liten UDF som returnerar första dag och tid under året/månaden/veckan/dagen samt sista dag och tid under samma perioder.
Funktionen behöver tre parametrar:
1\. Ett datum
2\. Val av returdatum, ange: year, month, week eller day
3\. Första eller sista datum, ange: 1 eller 2

OBS! Du kan behöva ange datefirst också vid anropet!

Ex:

```
set datefirst 1
select dbo.ConvertDate('2005-02-22', 'week', 2)
```

returnerar: 2005-02-27 23:59:59.997

```
CREATE FUNCTION ConvertDate
	(@CurrentDate datetime, 
	 @Datetype varchar(5), 
	 @StartEnd tinyint)

RETURNS datetime

AS
	
BEGIN

	DECLARE @Date AS datetime
	DECLARE @Year AS varchar(4)
	DECLARE @Month AS varchar(2)
	DECLARE @Day AS varchar(2)

	SET @Year = DatePart(yyyy, @CurrentDate)
	SET @Month = DatePart(mm, @CurrentDate)
	SET @Day = DatePart(dd, @CurrentDate)

	--startdatum, dvs första tiden/dagen på året, månaden, veckan, dagen
	IF(@StartEnd=1)
	BEGIN
		IF(@Datetype='year')
			SET @Date = CONVERT(datetime, @Year+'-01-01', 21)
		ELSE IF(@Datetype='month')
			SET @Date = CONVERT(datetime, @Year+'-'+@Month+'-1', 21)
		ELSE IF(@Datetype='week')
			SET @Date = CONVERT(datetime, DATEADD(dd, -DATEPART(dw, @CurrentDate)+1, @CurrentDate), 21)
		ELSE IF(@Datetype='day')
			SET @Date = CONVERT(datetime, @Year+'-'+@Month+'-'+@Day, 21)
	END

	--slutdatum, dvs sista tiden/dagen på året, månaden, veckan, dagen
	ELSE IF(@StartEnd=2)
	BEGIN
		IF(@Datetype='year')
			SET @Date = CONVERT(datetime, @Year+'-12-31 23:59:59.998', 21)
		ELSE IF(@Datetype='month')
			SET @Date = CONVERT(datetime, DATEADD(dd, -1, CAST(CAST(year(DATEADD(mm, 1, @CurrentDate)) AS varchar(4))+'-'+CAST(month(DATEADD(mm, 1, @CurrentDate)) AS varchar(2))+'-1 23:59:59.998' AS datetime)), 21)
		ELSE IF(@Datetype='week')
			SET @Date = CONVERT(datetime, DATEADD(dd, (7-DATEPART(dw, @CurrentDate)), CAST(@Year+'-'+@Month+'-'+@Day+' 23:59:59.998' AS datetime)), 21)
		ELSE IF(@Datetype='day')
			SET @Date = CONVERT(datetime, @Year+'-'+@Month+'-'+@Day+' 23:59:59.998', 21)
	END
	
RETURN @Date

END
```

Permalänk: https://www.webforum.nu/p/123045

---

Tråden på webben: https://www.webforum.nu/amne/programmering/123045-tsql-udf-som-returnerar-första-sista-dagen-i-veckan-månaden-m-m
