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 ?
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) & "'"
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.
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.