Avatar billede inkognito1 Nybegynder
05. oktober 2002 - 19:15 Der er 3 kommentarer og
1 løsning

Ændre fra nvarchar til smalldatetime ...

Jeg har konverteret min database fra Access til MS Sql.

Jeg henter noget data ud af databasen ud fra fødsels dato.

Problemet er at når jeg vil Select fra en MS Sql fatter den åbenbart ikke som Access gør det.

Jeg har forsøgt at konvetere feltet fra Nvarchar til smalldate time men der kommer fejl om den ikke kan gøre det.

Hvad hulen gør jer ?
Avatar billede inkognito1 Nybegynder
05. oktober 2002 - 19:17 #1
Dato formatet er: 26-12-1975

Min select som virker i Access ser sådan ud: (henter alle over 10 år)

"SELECT * FROM venner WHERE CPR< '" & DateAdd("yyyy",-20,Now) & "'"
Avatar billede bennytordrup Nybegynder
05. oktober 2002 - 20:12 #2
Du har to muligheder:

1. Du bibeholder CPR som nvarchar (jeg går ud fra, at det er feltet CPR, der er problemet). Så skal du lave følgende konvertering af CPR hver gang, du skal sammenligne den med en dato:

convert(smalldatetime, cpr, 103)

2. Du tilføjer et dummyfelt af typen nvarchar, sætter indholdet lig CPR, dropper feltet CPR, adder feltet CPR med datatypen smalldatetime, sætter det nye CPR = convert(smalldatetime, dummycpr, 103) og dropper endelig dummyfeltet.

Herefter kan du bruge cpr direkte som ovenfor.


Når du sammenligner med et datofelt i forhold til f.eks. dateadd, så brug følgende format:

cast(convert(nvarchar(8), dateadd(yy, -20, getdate()), 112) as smalldatetime)

Derved får du datoen konverteret til ISO format (yyyymmdd) uden tidspunkt. Fordelen ved ISO formatet er, at det genkendes altid af SQL Server uden hensyn til serverens datoformat.
Avatar billede inkognito1 Nybegynder
05. oktober 2002 - 20:20 #3
2. Hvordan sætter jeg den lig med ??? Mener du at jeg skal loope mig ignnem database  ?? ... eller er der en nemmere måde ?
Avatar billede bennytordrup Nybegynder
06. oktober 2002 - 09:01 #4
<Snip>
alter table [Tabel]
add column DummyCPR nvarchar(10)

go

update [Tabel]
set DummyCPR = CPR

go

alter table [Tabel]
drop column CPR

go

alter table [Tabel]
add column CPR smalldatetime

go

update [Tabel]
set cpr = convert(smalldatetime, DummyCPR, 103)

go

alter table [Tabel]
drop column DummyCPR
</Snip>

Ovenstående script konverterer CPR fra nvarchar til smalldatetime. Det er skrevet efter hukommelsen.
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