en-USsv-SE
Du är här:   Forum
HemHemDiscussionsDiscussionsHjälp!Hjälp!Konvertera ISO_WEEK till datumKonvertera ISO_WEEK till datum
Föregående
 
Nästa
Nytt inlägg
2012-04-04 16:55
 
Hejsan,

Jag håller på med en integration mot Pyramid Affärssystem som har en del lustigheter för sig. Det är bland annat så att vissa fält i databasen inte är angivna som datum utan i egenskap av År-vecka-dag.

Tex. 2012143 är år 2012, vecka 14, dag nummer 3 i veckan, dvs onsdag. Även varianten 201214 kan användas där dag saknas. Jag antar att den då räknar dag som 1, dvs måndag per automatik men har inte verifierat detta ännu.

Pyramid har en egen funktion för att konvertera detta i sina rapportvyer, men i databasen som jag har access till via en ODBC-länk, så ligger fältet i år-vecka-dag-formatet.

Är det någon som kan ge ett tips på hur man bör utföra denna konvertering på ett smidigt och säkert sätt?

Användaren som kör sessionen har jag konfat så den har land satt till Sverige, detta för att få @@datefirst satt till 1. Dvs första dagen i en vecka är en måndag (i US = default 7, dvs sön).

Startvecka skiljer sig ju mellan olika länder och vid konvertering av ett datum till en svensk vecka så kan man ju använda sig av typen ISO_WEEK (isowk), vilket är rätt enkelt. Men när man vill konvertera åt andra hållet så verkar denna typ inte vara applicerbar på något vettigt sätt.

Har satt ihop lite testkod baserat på tips från nätet, som gör ungefär det jag vill, men det diffar på en dag i dagsläget.

---
declare @yearweek varchar(7)
declare @year1 smallint
declare @week1 tinyint
declare @day1 tinyint
set @yearweek = '2012141'
set @year1 = cast(left(@yearweek, 4) as smallint)
set @week1 = cast(substring(@yearweek, 5, 2) as tinyint)
set @day1 = cast(substring(@yearweek, 7, 1) as tinyint)
select @year1, @week1, @day1
--select dateadd(year, @year1-1900, 0)
--select dateadd(day, @day1-1, dateadd(year, @year1-1900, 0))
select dateadd(day, @day1-1, dateadd(week, @week1-1, dateadd(year, @year1-1900, 0)))
---

Verkar inte som att man kan använda sig av isowk i dateadd-funktionen och rent teoretiskt så borde detta ställa till med problem tycker jag. Detta eftersom att isowk borde addera olika antal dagar till datumet beroende på vilken typ av veckohantering det avser. Så kanske måste få ut värdet på något annat sätt?

Notera att jag ännu inte har lagt in någon kontrollerad hantering för datum i formen '201214', dvs utan dag. Men det ska ju också in.

Ska lägga upp en testorder i Pyramid med artiklar med lite olika lev-vecka för att se hur Pyramid konverterar en rad olika kniviga datum, så jag har något att verifiera mot.

Kör med SQL Server Express 2008 R2. Om någon bra lösning finns i SQL Server 2012 så kan jag ev konvertera till den om det underlättar det hela.

Tips på lösning tages tacksamt emot!

Mvh
Marcus
 
Nytt inlägg
2012-04-05 03:35
 
Hittade en funktion som verkar lösa detta.

http://weblogs.sqlteam.com/peterl/arc...

Mvh
Marcus
 
Föregående
 
Nästa
HemHemDiscussionsDiscussionsHjälp!Hjälp!Konvertera ISO_WEEK till datumKonvertera ISO_WEEK till datum


Annons