webForumDet fria alternativet

DateAdd i sql?

11 svar · 859 visningar · startad av Asa

AsaMedlem sedan dec. 20011 860 inlägg
#1

Jag tänkte hämta lite info från databasen och ska då kolla om datumet i databasen+20 dagar är tidigare än dagens datum. Det ska vara till ett fakturasystem där alla förfallna fakturor ska visas.

Hur ska man skriva?!

LeonLMedlem sedan dec. 20025 871 inlägg
#2

Du kan kolla om datumet i databasen är tidigare än dagens datum - 20 dagar. ;)

AsaMedlem sedan dec. 20011 860 inlägg
#3

Det kanske man kan jaa...ska testa

Jesper TMedlem sedan nov. 20017 144 inlägg
#4

Det borde ju gå att göra något liknande:

SELECT * FROM tabell WHERE DATEDIFF(day, payday, now()) > 20

*payday=kolumen när räkningen skall betalas

AsaMedlem sedan dec. 20011 860 inlägg
#5

Det funkade ju bra men fick skriva så här:

SELECT * FROM tabell WHERE DATEDIFF('d', datum, now()) > 20

Är Access-databas. Kanske därför?

PoffeMedlem sedan apr. 20022 743 inlägg
#6

Asa skrev:

Är Access-databas. Kanske därför?

Nej, det var bara Jesper som skrivit fel. 'd' är det korrekta inte day.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/vsfctDatePart.asp

LarsGMedlem sedan dec. 200012 464 inlägg
#7

Flyttas från ASP

Korrekt? Datediff i någon form är inte korrekt.

Jesper TMedlem sedan nov. 20017 144 inlägg
#8

Vad skall det vara då?

Jesper TMedlem sedan nov. 20017 144 inlägg
#9

LarsG skrev:

Korrekt? Datediff i någon form är inte korrekt.

Om det är fel med Datediff, vad skall det då vara i stället?

LarsGMedlem sedan dec. 200012 464 inlägg
#10

SQL standarden har stöd för intervall för att hantera tidsskillnader. Ett intervall kan till exempel vara 3 timmar 14 minuter och 11 sekunder. Med datediff så kan man bara hantera hela timmar /minuter /sekunder etc.

För att beräkna en tidsskillnad så gör man t.ex.

select (timestampValue1 - timestampValue2) hour(4) to second from t
MickeA.comMedlem sedan feb. 20034 441 inlägg
#11

Tjena
Nu sitter jag på nästan samma problem.
Har ett fakurasystem, där jag nu ska visa alla fakturor som förfallit.

Det som rör till det hela lite är att förfallodagarna är olika på varje faktura, det kan vara allt mellan 5 och 30 dagar.

Mina fält är:

fakt_date     datum
fakt_forfallo     tal

Nu har jag gjort såhär:

sSql =	"SELECT " &_
	"t1.nId, t1.gId AS anm_gId, t1.nName, t1.nPersNum, t1.nAnmTime, t1.nAnmQueued, t1.rec_magic_num, t1.fakt_date, t1.fakt_forfallo, t1.bet_date, " &_
	"t2.gId AS gru_gId, t2.lId, t2.gName, t2.gDayTime, t2.gStartDate, t2.gEndDate, t2.gPlace, t2.gPrice " &_
	"FROM tbl_sSchool_notifications t1 INNER JOIN tbl_sSchool_groups t2 " &_
	"ON t1.gId = t2.gId " &_
	"WHERE IsDate(t1.fakt_date) " &_
	"AND DATEADD('d', t1.fakt_forfallo, t1.fakt_date) < NOW " &_
	"ORDER BY t2.lId ASC, t2.gId ASC, t1.nAnmTime ASC"

Problemet är att jag får "Typblandningsfel i villkorsuttryck" eller nått annat felmeddelande, men kör jag istället:

...WHERE ... AND DATEADD('d', 1, #2006-10-20#) < NOW

Då vet jag att resultatet ska bli två stycken fakturor, där jag manipulerat datumen. IStället för att skriva ut dessa två, skrivs 516 fakturor ut, vilket är det totala antal som finns i tabellen.
Alltså är det någon som är fel.
KOllar jag hur ovanstående löst det, så bör det vara med DATEDIFF, men jag är lite vimsig just nu efter alla försökt och är inte riktigt med på hur jag ska göra.

Tack på förhand!

MickeA.comMedlem sedan feb. 20034 441 inlägg
#12

Det där var ju inte så svårt om man testade lite olika saker.
Följande kod funkar utmärkt och visar exakt det jag vill:

sSql =	"SELECT " &_
	"t1.nId, t1.gId AS anm_gId, t1.nName, t1.nPersNum, t1.nAnmTime, t1.nAnmQueued, t1.rec_magic_num, t1.fakt_date, t1.fakt_forfallo, t1.bet_date, " &_
	"t2.gId AS gru_gId, t2.lId, t2.gName, t2.gDayTime, t2.gStartDate, t2.gEndDate, t2.gPlace, t2.gPrice " &_
	"FROM tbl_sSchool_notifications t1 INNER JOIN tbl_sSchool_groups t2 " &_
	"ON t1.gId = t2.gId " &_
	"WHERE IsDate(t1.fakt_date) " &_
	"AND DATEDIFF('d', t1.fakt_date, NOW()) >= t1.fakt_forfallo " &_
	"ORDER BY t2.lId ASC, t2.gId ASC, t1.nAnmTime ASC"
133 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)