Avatar billede bobber Nybegynder
19. juli 2006 - 15:19 Der er 18 kommentarer og
1 løsning

increment for hver måned med 1 fra 1968 til 2047

Jeg har en tabel som indeholder nogle datoer fra 01-01-1968 til og med 30-12-2047 , det jeg ønsker er at oprette en ny kolonne kaldet monthId, som tæller 1 op for hver måned , dvs datointervallet 01-01-1968 til 31-01-1968 vil give monthid 1 og
datointervallet 01-02-1968 til 29-02-1968  vil så give monthid 2 og så videre indtil den 30-12-2047 , så jeg har behov for noget sql(script) som jeg kan køre i en query som opdater monthId kolonnen.. nogen som har et bud.
Avatar billede the_party_dog Nybegynder
19. juli 2006 - 15:22 #1
Kunne du ikke lave noget med en fetch, som selecter hele din tabel. Imens du "fetch'ede" igennem, kunne du lave en DATEDIFF(m, X, Y), hvor X ville være din mindste dato, mens Y ville være den dato du er nået til i din fetch.

X Skulle så udlæses inden du gik ind i din fetch.
Avatar billede lorentsnv Nybegynder
19. juli 2006 - 15:28 #2
Du kan også bruge datepart(m, dato) for at få månedsnummeret fra en dato.
Avatar billede lorentsnv Nybegynder
19. juli 2006 - 15:30 #3
Hvis du har dit felt som heder Dato, der indeholder de nævnte datoer, og du ønsker feltet Monthid opdateret, kan du måske køre følgende

Update tabel
Set monthid = datepart(m, Dato)

Så vil hele tabellen blive opdateret.
Avatar billede the_party_dog Nybegynder
19. juli 2006 - 15:37 #4
Skulle det ikke være så ikke være DATEDIFF?

Datepart giver jo kun måned for det år han arbejder med?

Sådan som jeg forstår hans spørgsmål skal han tælle alle måneder fra 1968 frem til 2047...

Lorentsnv nogen gange laver man ting mere avanceret end de behøver. Havde slet ikke ikke tænkt på din simple; men geniale idé... :)
Avatar billede the_party_dog Nybegynder
19. juli 2006 - 15:39 #5
lorentsnv> Dit DATEPART vil jo lave flere monthid som giver det samme, fordi at 01-02-1968 giver 2, men det gør 01-02-2006 også. Tror bestemt han skal bruge DATEDIFF.....
Avatar billede lorentsnv Nybegynder
19. juli 2006 - 15:56 #6
the_party_Dog: Du har helt ret! Det er mig der ikke har læst beskrivelesn nøje. Min kode giver kun månedsnummer, 1 for januar, 2 for februar osv.

Hvis hver måned i hele intervallet skal have en unik værdi, skal DateDiff bruges.
Avatar billede the_party_dog Nybegynder
19. juli 2006 - 15:59 #7
lorentsnv> Så er vi enige...

bobber> Det må være lorentsnv som skal have disse points, da jeg var helt på afveje, hans er meget nemmer at gå til.

I må have en god dag, nu vil jeg svede videre... :)
Avatar billede lorentsnv Nybegynder
19. juli 2006 - 15:59 #8
Men der er vel ingen grund til at bruge fetch i form af en cursor. Set b aseret SQL vil være hurtigst:

Declare @Startdato datetime
Set @Startdato  = '1968-01-01'

Update tabel
Set monthid = datpart(m, @StartDato, AktuelDato)
Avatar billede the_party_dog Nybegynder
19. juli 2006 - 16:04 #9
lorentsnv> Vi er bestemt ikke uenige.. SET vil klart slå min fetch med flere længde rent ydelses mæssigt. Varmen gik simpelthen i hovedet på mig, jeg kunne ikke se skoven for bare træer :-)

Men husk lige at skrive DATEDIFF og ikke datepart i dit eksempel.. :) Look at your last post...
Avatar billede lorentsnv Nybegynder
19. juli 2006 - 16:08 #10
the_party_dog: Det var da dig som kom med rigtig forslag med DateDiff. Så du har da lavet det største bidrag til en løsning!
Avatar billede the_party_dog Nybegynder
20. juli 2006 - 17:19 #11
bobber> Hvad siger du til det? Har du fået hul igennem noget?
Avatar billede bobber Nybegynder
21. juli 2006 - 09:29 #12
Nej, jeg har ikke fået hul igennem, med jeres forslag, det gav ikke 1....2...3... osv op til den sidste dato jeg har. den tæller 12 op for hvert år, dvs at monthId = 959 , i alle rækker, hvis jeg tager datoen 1968-01-01 til 2047-12-31

nogen forslag.
Avatar billede lorentsnv Nybegynder
21. juli 2006 - 09:46 #13
Det skal være DateDiff og ikke DatePart. Jege har lige checket følgende kode som fungerer ok:

Declare @Startdato datetime
Set @Startdato  = '1968-01-01'

Update TestTabel
Set Monthid = DateDiff(m, @StartDato, Dato)


Her har jeg en tabel der heder TestTabel, og i denne tabel har jeg en kolonne der heder Dato.
Avatar billede lorentsnv Nybegynder
21. juli 2006 - 09:48 #14
Unskyld forvirringen jeg bragte ved at bruge DatePart og ikke DateDiff i mine tidligere eksempler. ;-)
Avatar billede the_party_dog Nybegynder
21. juli 2006 - 09:53 #15
Bobber> Nu har jeg lige lavet min egen lille tabel og testet det vi er nået frem til. For mig virker det, så vi bliver nød til at se din SQL sætning, for at hjælpe dig.

DECLARE @StartDato DATETIME
SET @StartDato = '1968-01-01'

SET MonthID = DATEDIFF(m, @StartDato, [DatoKolonne])
Avatar billede bobber Nybegynder
21. juli 2006 - 10:04 #16
Okey det var mig som skrev den sidste dato ind istedet for dato kolonnen :-)
Det virker nu
Avatar billede the_party_dog Nybegynder
21. juli 2006 - 10:49 #17
Det lyder sgu godt bobber... Så er du en glad mand :-)
Avatar billede lorentsnv Nybegynder
21. juli 2006 - 10:58 #18
the_party_dog> Du har lavet det største bidrag til løsning, så jeg har oprættet et nyt spørgsmål under MS SQL (Points to the_party_dog (increment for hver måned med 1 fra 1968), hvor du får dine points.
Avatar billede bobber Nybegynder
21. juli 2006 - 11:19 #19
Ja, sorry jeg skulle nok have delt dem mellem jer..... og ja jeg en glad mand.. :-)
så kan jeg komme videre
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester