Just nu i M3-nätverket
Jump to content

Välj inlägg mellan 2 datum


Christoph

Recommended Posts

Hej,

 

jag har hand om en MS-SQL-db med en tabell som innehåller två fält "date_" och "time_". Jag försöker nu filtrera bort alla inlägg som _inte_ är skapade mellan två tidspunkter, låt säger den 28:e augusti 2004 kl. 06:30:00 och den 30:e augusti 2004 kl. 09:02:00.

 

Skriver jag så här,

 

[color="#0000ff"]SELECT[/color]     *
[color="#0000ff"]FROM[/color]         RecHead
[color="#0000ff"]WHERE[/color]     (Date_ >= CONVERT(DATETIME, [color="#ff0000"]'2004-08-28 00:00:00'[/color], 102)) [color="#0000ff"]AND[/color] (Time_ >= CONVERT(DATETIME, [color="#ff0000"]'1900-01-01 06:30:00'[/color], 102)) [color="#0000ff"]AND[/color] 
                      (Date_ <= CONVERT(DATETIME, [color="#ff0000"]'2004-08-30 00:00:00'[/color], 102)) [color="#0000ff"]AND[/color] (Time_ <= CONVERT(DATETIME, [color="#ff0000"]'1900-01-01 09:02:00'[/color], 102))

 

hittas det inga inlägg alls. Någon som vet vad problemet är? Det finns inlägg i databasen.

 

Tacksam för all hjälp.

 

/C.

 

Link to comment
Share on other sites

Nu är jag ju ingen expert på MS SQL Server, men jag ska försöka komma med några tips ändå.

 

För det första undrar jag varför du har två kolumner för att spara ETT VÄRDE (på en tidpunkt)? I standard SQL används datatypen TIMESTAMP. (Ej att förväxla med SQL Servers datatyp med motsvarande namn som inte alls har något med saken att göra.)

 

Ifall du ni inte vill slå ihop de två kolumnerna till en kolumn kan du kanske skapa en vy som returnerar datat med date_ och time_ ihopslaget.

 

Jämför därefter hela värdet med de gränser du vill ha:

 

[color="#0000ff"]SELECT[/color] * [color="#0000ff"]FROM[/color] tabellen
[color="#0000ff"]WHERE[/color] date_time [color="#0000ff"]BETWEEN[/color] [color="#ff0000"]'2004-08-28 06:30:00'[/color] [color="#0000ff"]AND[/color]
                                         [color="#ff0000"]'2004-08-30 09:02:00'[/color]

eller (ifall du envisas med att ha två kolumner):

 

[color="#0000ff"]SELECT[/color] * [color="#0000ff"]FROM[/color] tabellen
[color="#0000ff"]WHERE[/color] date || time [color="#0000ff"]BETWEEN[/color] [color="#ff0000"]'2004-08-28 06:30:00'[/color] [color="#0000ff"]AND[/color]
                                            [color="#ff0000"]'2004-08-30 09:02:00'[/color]

 

Eftersom du kör MS SQL Server behöver du antagligen lägga in lite CONVERT och sådant för att det ska fungera. || i exemplet ovan står för den delen för CONCAT, alltså strängihopslagning.

 

Link to comment
Share on other sites

Hej,

 

tack för ditt svar. Jag kan mycket väl förstår att du tycker att det är konstig med att spara datum och tid i två olika kolumner. Anledningen till detta är att databasen används av ett stort program som används i restaurangbranschen, databasen fanns alltså innan jag tog itu med detta. Eftersom ett antal kassor använder sig av databasen är det lika bra att man låta det vara som det är, jag kan i detta läge bara acceptera detta märkligt sätt att spara datum och tid.

 

Ditt förslag funkade tyvärr inte, jag fick inget grepp om att slå ihop date_ och time_ till en och samma resultat. Det kan beror på att både date_ och time_ är av typen "datetime". Sparas det en tid sparas tiden (i time_) alltid med värdet "1900-01-01 06:30:00" (ex: kl. är 06:30). Datumet sparas låledes med "2004-08-28 00:00:00" (ex: datumet är 28:e augusti).

 

Någon som vet vad man kan göra åt detta?

 

/C.

 

Link to comment
Share on other sites

Du får väl trixa lite med substring och eventuellt även convert eller cast. Typ något i stil med:

 

SELECT * FROM tabellen

WHERE SUBSTRING(date_ FROM 1 for 11) ||

SUBSTRING(time_ FROM 12 for 8)

BETWEEN '2004-08-28 06:30:00'

AND '2004-08-30 09:02:00'

 

Link to comment
Share on other sites

Du får väl trixa lite med substring och eventuellt även convert eller cast.

 

Använd DATEPART ( datepart , date ) istället. Med den funktionen kan du få ut de delar du vill.

 

 

 

Link to comment
Share on other sites

Det låter bra detta, tack för all hjälp hittills - skall pröva detta a.s.a.p.

 

Jag undrar dock varför inte mitt exempel längst upp här visade rätt resultat? Någon som vet?!

 

/Christoph

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...