|
![](/App_Themes/Normal/images/Window/Backgrounds/news.gif) | Datoproblem igen Fra : Finn Elmgaard |
Dato : 06-01-07 02:00 |
|
Jeg skal udtrække data fra en SQLserver, hvor jeg ikke har mulighed for at
ændre struktur og definitioner.
Udtrækket er af typen:
SELECT * FROM tabel WHERE Datofelt > brugerinput.
Problemet er, at datofeltet er af typen char og dataoer er gemt i formatet:
yyyy-mm-dd hh:mm:ss
Jeg kan naturligvis styre mit brugerinput format, men er det muligt at
opsætte et sikkert kriterie på et felt af denne type?
mvh
Finn
| |
Jens Gyldenkærne Cla~ (05-01-2007)
![](/App_Themes/Normal/images/Window/Backgrounds/news.gif) | Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 05-01-07 17:24 |
|
Finn Elmgaard skrev:
> SELECT * FROM tabel WHERE Datofelt > brugerinput.
>
> Problemet er, at datofeltet er af typen char og dataoer er
> gemt i formatet: yyyy-mm-dd hh:mm:ss
Det lyder tosset, men du kan konvertere til datetime i
forespørgslen:
SELECT CONVERT(datetime, Datofelt, 121)
> Jeg kan naturligvis styre mit brugerinput format,
Du kan så også bruge CONVERT til at få dit brugerinput konverteret
til en dato. Hvis det bare er en dato (uden tid), kan det fx gøres
som her: CONVERT(datetime, '5-1-2006', 105)
(indsæt brugerinputtet i stedet for den faste værdi).
Med tidsangivelse er det ifølge manualen til T-SQL mere besværligt
- da de formater der anvender tid enten skriver måneden som en
forkortelse (der så er landeafhængig) eller også bruger "bagvendt"
notation (med året først, svarende til din char-værdi).
Men man kan øjensynligt bare tilføje tiden som hh:mm til ovennævnte
CONVERT-udtryk, og så læses det helt fint:
select CONVERT(datetime, '5-1-2006 12:24', 105)
Ved at konvertere begge sider til en dato skulle du være sikret mod
formateringsrelaterede sammenligningsfejl.
--
Bolig søges. Andel eller leje i Emdrup, Nordvest, Nørrebro, Søborg
eller Brønshøj, max 6000 pr. måned.
Kontakt pr. mail - nospam(at)gyros.dk
Jens Gyldenkærne Clausen
| |
Finn Elmgaard (06-01-2007)
![](/App_Themes/Normal/images/Window/Backgrounds/news.gif) | Kommentar Fra : Finn Elmgaard |
Dato : 06-01-07 19:56 |
|
"Jens Gyldenkærne Clausen" <jens@gyros.invalid> wrote in message
news:Xns98AFB1058BAC7jcdmfdk@gyrosmod.dtext.news.tele.dk...
> Finn Elmgaard skrev:
>
> > SELECT * FROM tabel WHERE Datofelt > brugerinput.
> >
> > Problemet er, at datofeltet er af typen char og dataoer er
> > gemt i formatet: yyyy-mm-dd hh:mm:ss
>
> Det lyder tosset, men du kan konvertere til datetime i
> forespørgslen:
>
> SELECT CONVERT(datetime, Datofelt, 121)
>
Tak for hjælpen. Det er lige netop hvad der var behov for - jeg har
tidligere brugt CONVERT,
men troede kun den virkede den anden vej, altså ved indsæt i databasen, men
det her er jo ret smart.
>
> Ved at konvertere begge sider til en dato skulle du være sikret mod
> formateringsrelaterede sammenligningsfejl.
Det vil nok være en god idé, så det gør jeg.
mvh
Finn
> --
> Bolig søges. Andel eller leje i Emdrup, Nordvest, Nørrebro, Søborg
> eller Brønshøj, max 6000 pr. måned.
> Kontakt pr. mail - nospam(at)gyros.dk
> Jens Gyldenkærne Clausen
| |
![](/images/tree/0.gif) Jens Gyldenkærne Cla~ (06-01-2007)
![](/App_Themes/Normal/images/Window/Backgrounds/news.gif) | Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 06-01-07 20:34 |
|
Finn Elmgaard skrev:
> Tak for hjælpen. Det er lige netop hvad der var behov for -
> jeg har tidligere brugt CONVERT,
> men troede kun den virkede den anden vej, altså ved indsæt i
> databasen, men det her er jo ret smart.
Ja, CONVERT er ret god at kende - den kan konvertere både til og
fra datoer.
NB: Dit ur - eller din tidszoneangivelse - er et godt stykke ved
siden af.
--
Jens Gyldenkærne Clausen
»Diplomatiet består netop i, at de gamle kommatister kan få lov til
at tro, at de har vundet. Men i virkeligheden har de tabt.«
Ole Togeby i Information
| |
JB (05-01-2007)
![](/App_Themes/Normal/images/Window/Backgrounds/news.gif) | Kommentar Fra : JB |
Dato : 05-01-07 17:48 |
|
> Jeg skal udtrække data fra en SQLserver, hvor jeg ikke har mulighed for at
> ændre struktur og definitioner.
>
> Udtrækket er af typen:
>
> SELECT * FROM tabel WHERE Datofelt > brugerinput.
>
> Problemet er, at datofeltet er af typen char og dataoer er gemt i
> formatet:
> yyyy-mm-dd hh:mm:ss
>
> Jeg kan naturligvis styre mit brugerinput format, men er det muligt at
> opsætte et sikkert kriterie på et felt af denne type?
>
Se http://www.dan.co.uk/mysql-date-format/
JB
| |
Finn Elmgaard (06-01-2007)
![](/App_Themes/Normal/images/Window/Backgrounds/news.gif) | Kommentar Fra : Finn Elmgaard |
Dato : 06-01-07 20:06 |
|
"JB" <nospam@nospam.dk> wrote in message
news:459e81b1$0$13969$edfadb0f@dread15.news.tele.dk...
>
> > Jeg skal udtrække data fra en SQLserver, hvor jeg ikke har mulighed for
at
> > ændre struktur og definitioner.
>
> Se http://www.dan.co.uk/mysql-date-format/
>
> JB
Tak for dit svar, men så vidt jeg lige kan se går det vistnok specifikt på
MySQL, hvor det tilsyneladende svarer til CONVERT funktionen i SQL Server.
mvh
Finn
| |
|
|