/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Smart måde at lave tidsinterval
Fra : Laurits Thomsen


Dato : 19-09-06 09:00

Hej
I min database har jeg en tabel der bl.a. indeholder en startdato
(langt datoformat) og en slutdato (langt datoformat). Tabellen
viser nogle vagter der er startet på startdatoen og sluttet på
slutdatoen. (det kunne f.eks. være en vagt der er startet
01-01-06 kl. 07:15 og sluttet 01-01-06 kl. 22:00.
Jeg ønsker nu at lave en side der f.eks. kan vise alle der har
været på vagt kl. 08:00 og 16:00. Jeg har været ved at rode mig
ud i en masse IIF sætninger i min SQL, men tænkte om der er en
der kender en smart løsning.

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Lars Hoffmann (19-09-2006)
Kommentar
Fra : Lars Hoffmann


Dato : 19-09-06 09:50


Laurits Thomsen wrote:
> Hej
> I min database har jeg en tabel der bl.a. indeholder en startdato
> (langt datoformat) og en slutdato (langt datoformat). Tabellen
> viser nogle vagter der er startet på startdatoen og sluttet på
> slutdatoen. (det kunne f.eks. være en vagt der er startet
> 01-01-06 kl. 07:15 og sluttet 01-01-06 kl. 22:00.
> Jeg ønsker nu at lave en side der f.eks. kan vise alle der har
> været på vagt kl. 08:00 og 16:00. Jeg har været ved at rode mig
> ud i en masse IIF sætninger i min SQL, men tænkte om der er en
> der kender en smart løsning.

Hvis vi snakker om en Access database er det vel bare at lave noget i
stil med:

select *
from ValgtSkema
where startdato <= #01/01/2006 08:00:00#
and slutdate >= #01/01/2006 08:00:00#

Hvis det er en danden database kan du sikkert gøre det på samme måde
men med et andet datoformat.

Med venlig hilsen
Lars Hoffmann


Laurits Thomsen (19-09-2006)
Kommentar
Fra : Laurits Thomsen


Dato : 19-09-06 11:05

> Hvis vi snakker om en Access database ...
Det gør vi

> where startdato <= #01/01/2006 08:00:00#
> and slutdate >= #01/01/2006 08:00:00#

Ok, så langt så godt, men hvad så hvis der er en der har en vagt fra
01.01.06 kl. 23:30 til 02.01.06 kl. 09:00? Vedkommende skal stadig
indgå i udtrækket, men opfylder ikke ovenstående kriterier. Så er det
man kommer ind i en masse IIf sætninger.

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Jens Gyldenkærne Cla~ (19-09-2006)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 19-09-06 12:52

Lars Hoffmann skrev:

> Jeg er ikke sikker på dato formatet i access. Jeg kan ikke
> huske om den 2. januar 2006 noteres som 01/02/2006 eller
> 02/01/2006.

Safety first - brug DateSerial(yyyy, mm, dd) eller et datoformat
som ODBC's: yyyy-mm-dd hh:mi:ss - det kan ikke misforstås.

Jeg mener at Access internt holder sig til det amerikanske format -
dvs. mm/dd/yyyy - men jeg undgår altid at anvende den slags
formater medmindre jeg kan angive formatet til basen direkte (fx
med CONVERT i MSSQL).
--
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

Stig Johansen (21-09-2006)
Kommentar
Fra : Stig Johansen


Dato : 21-09-06 06:34

Jens Gyldenkærne Clausen wrote:

> Safety first - brug DateSerial(yyyy, mm, dd) eller et datoformat
> som ODBC's: yyyy-mm-dd hh:mi:ss - det kan ikke misforstås.

Insekterotik - men det er nu ISO format.

--
Med venlig hilsen
Stig Johansen

Jens Gyldenkærne Cla~ (22-09-2006)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 22-09-06 18:53

Stig Johansen skrev:

>> Safety first - brug DateSerial(yyyy, mm, dd) eller et datoformat
>> som ODBC's: yyyy-mm-dd hh:mi:ss - det kan ikke misforstås.

> Insekterotik - men det er nu ISO format.

Hvilken ISO-standard er det? Jeg kender kun ISO 8601 vedr.
repræsentation af datoer - og skønt det format minder en del om
ovenstående, er det ikke det samme (der skal være et T som
skilletegn mellem datoen og tidsangivelsen).

Jeg ved ikke om det nævnte format er skabt til brug i ODBC-
sammenhæng, men det er i hvert fald det navn der anvendes i
dokumentationen til MSSQL (se fx
<http://msdn2.microsoft.com/en-us/library/ms190234.aspx>)
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Stig Johansen (24-09-2006)
Kommentar
Fra : Stig Johansen


Dato : 24-09-06 05:08

Jens Gyldenkærne Clausen wrote:

> Stig Johansen skrev:
>
>>> Safety first - brug DateSerial(yyyy, mm, dd) eller et datoformat
>>> som ODBC's: yyyy-mm-dd hh:mi:ss - det kan ikke misforstås.
>
>> Insekterotik - men det er nu ISO format.
>
> Hvilken ISO-standard er det? Jeg kender kun ISO 8601 vedr.
> repræsentation af datoer - og skønt det format minder en del om
> ovenstående, er det ikke det samme (der skal være et T som
> skilletegn mellem datoen og tidsangivelsen).
>
> Jeg ved ikke om det nævnte format er skabt til brug i ODBC-
> sammenhæng, men det er i hvert fald det navn der anvendes i
> dokumentationen til MSSQL (se fx
> <http://msdn2.microsoft.com/en-us/library/ms190234.aspx>)

Som sagt, er det insekterotik, men vi snakker jo netop om repræsentationen
og ikke det interne format - eller tager jeg fejl?

Langt de fleste databaser, jeg kender til, bruger em eller anden form for
antal sekunder siden 1/1-1900 eller lignende til det /interne/ format.

Der hvor forskellene kommer, er den implicitte konvertering fra literals til
interne formater, hvor den nok mest aparte er Access brug af # og default,
som du skriver, mm/dd/yyyy, uagtet locale settings.

Det link du henviser til, ser for mig ud som om man har mulighed for at
benytte ODBC's bufferlayout for hhv. SQL_DATE_STRUCT, SQL_TIME_STRUCT samt
SQL_TIMESTAMP_STRUCT ved OLEDB programmering.
<http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbc/htm/odbcc_data_types.asp>

En hurtig google gav følgende yderligere infor om MS SQLServer:
<http://66.249.93.104/search?q=cache:-QL84zL2X6oJ:www.sql-server-performance.com/fk_datetime.asp+MS+SQLserver+datetime+internal+format&hl=en&ct=clnk&cd=4>

--
Med venlig hilsen
Stig Johansen

Jens Gyldenkærne Cla~ (24-09-2006)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 24-09-06 22:08

Stig Johansen skrev:

> Som sagt, er det insekterotik,

Bestemt - men det skal der da også være plads til


> men vi snakker jo netop om repræsentationen og ikke det interne
> format

Netop.


> Det link du henviser til, ser for mig ud som om man har
> mulighed for at benytte ODBC's bufferlayout for hhv.
> SQL_DATE_STRUCT, SQL_TIME_STRUCT samt SQL_TIMESTAMP_STRUCT ved
> OLEDB programmering.

Her har du tabt mig. Jeg ved ikke hvad ODBC's bufferlayout er (og
kan ikke se det ud af de links der har været i tråden).

Min pointe er at den eneste ISO standard jeg kan finde vedr.
repræsentation af datoer har et "T" som obligatorisk skilletegn
mellem datoen og tiden i en kombineret dato/tid-repræsentation (og
normalt også en angivelse af tidszone efter tiden). Dermed svarer
ISO-repræsentationen ikke (helt) til det format jeg kender som
ODBC.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Lars Hoffmann (19-09-2006)
Kommentar
Fra : Lars Hoffmann


Dato : 19-09-06 12:44


Laurits Thomsen wrote:
> > Hvis vi snakker om en Access database ...
> Det gør vi
>
> > where startdato <= #01/01/2006 08:00:00#
> > and slutdate >= #01/01/2006 08:00:00#
>
> Ok, så langt så godt, men hvad så hvis der er en der har en vagt fra
> 01.01.06 kl. 23:30 til 02.01.06 kl. 09:00? Vedkommende skal stadig
> indgå i udtrækket, men opfylder ikke ovenstående kriterier. Så er det
> man kommer ind i en masse IIf sætninger.

Du skal vel bare kigge på om enten vagt start tidspunktet eller vagt
sluttidspunktet er indenfor den angivne tidsrum:

where
( startdato <= #01/01/2006 23:00:00#
and slutdate >= #01/01/2006 23:00:00# )
OR
(
startdato <= #01/02/2006 09:00:00#
and slutdate >= #01/02/2006 09:00:00#
)

Holder den ikke vand?

Med venlig hilsen
Lars Hoffmann


Lars Hoffmann (19-09-2006)
Kommentar
Fra : Lars Hoffmann


Dato : 19-09-06 12:46


Lars Hoffmann wrote:
> #01/02/2006 09:00:00#

Jeg er ikke sikker på dato formatet i access. Jeg kan ikke huske om
den 2. januar 2006 noteres som 01/02/2006 eller 02/01/2006.

Du må lige prøve dig frem.


Lars Hoffmann (19-09-2006)
Kommentar
Fra : Lars Hoffmann


Dato : 19-09-06 14:33

Jens Gyldenkærne Clausen wrote:

> Safety first - brug DateSerial(yyyy, mm, dd)

Absolutely - det er en uskik at behandle en dato som en streng.

Med venlig hilsen
Lars Hoffmann


Jørn Andersen (19-09-2006)
Kommentar
Fra : Jørn Andersen


Dato : 19-09-06 16:52

On 19 Sep 2006 07:59:45 GMT, Laurits Thomsen
<laurits_vibjerg@hotmail.com> wrote:

>I min database

Hvilken database?

>har jeg en tabel der bl.a. indeholder en startdato
>(langt datoformat) og en slutdato (langt datoformat).

Glem formatet - det fortæller kun noget om, hvordan det *vises* i din
database. *Værdien* er den samme uanset hvilket format der er valgt.
(I hvert fald i MS Access, som er den jeg kender bedst.)

>Tabellen
>viser nogle vagter der er startet på startdatoen og sluttet på
>slutdatoen. (det kunne f.eks. være en vagt der er startet
>01-01-06 kl. 07:15 og sluttet 01-01-06 kl. 22:00.
>Jeg ønsker nu at lave en side der f.eks. kan vise alle der har
>været på vagt kl. 08:00 og 16:00. Jeg har været ved at rode mig
>ud i en masse IIF sætninger i min SQL, men tænkte om der er en
>der kender en smart løsning.

Der er 3 muligheder:
- vagtstart ligger i intervallet
- vagtslut ligger i intervallet
- vagtstart ligger før intervalstart og vagtslut ligger efter
intervalstart

' Angiv først interval-start og -slut,
' så er det nemmere at overskue
strIntervalStart = "DateSerial(2006, 1, 1) + TimeSerial(8, 0, 0)"
strIntervalSlut = "DateSerial(2006, 1, 1) + TimeSerial(16, 0, 0)"

strSql = "SELECT whatever FROM tblVagtSkema" & _
" WHERE (vagtstart BETWEEN " & strIntervalStart & _
" AND " & strIntervalSlut & _
") OR (vagtslut BETWEEN " & strIntervalStart & " AND " & _
strIntervalSlut & _
") OR (DateDiff('s', vagtstart, " & strIntervalStart & _
") < 0 AND DateDiff('s', vagtslut, " & strIntervalSlut & _
") > 0)"

BETWEEN ... AND er svjh *inkl.* de angivne værdier.

Ikke testet - håber det virker

Forudsætter, at det er en Access db, da den anvender de indbyggede
funktioner i Access.


Good luck!

--
Jørn Andersen,
Brønshøj

Laurits Thomsen (29-09-2006)
Kommentar
Fra : Laurits Thomsen


Dato : 29-09-06 07:34

> Hvilken database?
Access


> strSql = "SELECT whatever FROM tblVagtSkema" & _
> " WHERE (vagtstart BETWEEN " & strIntervalStart & _
> " AND " & strIntervalSlut & _
> ") OR (vagtslut BETWEEN " & strIntervalStart & " AND " & _
> strIntervalSlut & _
> ") OR (DateDiff('s', vagtstart, " & strIntervalStart & _
> ") < 0 AND DateDiff('s', vagtslut, " & strIntervalSlut & _
> ") > 0)"
>

Det var lige det jeg ledte efter - tak for det!
Mvh
Laurits

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste