[ 26. May 2000]
- Jany_Masaryk
DßtovΘ funkcie a prßca s nimi v ASP strßnkach a MS SQLServer
Tento tip vznikol na zßklade otßzok nßÜho Φitate╛a:
Robφm databßzu v SQLserver7.0. Chcem pou₧φva¥ dßtum ako kritΘrium zobrazovania ·dajov z tabu╛ky.
Mßm stσpec s menom Datum a do neho zapisujem cez ASP dßtum funkciou Date(). Dßtum v tomto stσpci je vo formßte 4.4.2000.
Potrebujem napφsa¥ ASP, ktorΘ mi pod╛a t²chto dßtumov bude zobrazovat ·daje z celej tabu╛ky.
ProblΘm zaΦφna tu :
Ja to potrebujem tak, aby mi ukazoval ·daje, ktorΘ su X dni starΘ, teda vÜetky od (dneÜn² dßtum - X) vΣΦÜie. Ke∩ napφÜem do ASP ₧e
Select * from tab_name where Datum >= Date() - X
tak proste mi vyhodφ nejak· chybu. VieÜ mi please poradi¥ presn· syntax, ₧e ako to dosiahnem?
RieÜenie 1 :
Tak₧e rieÜenφ je nieko╛ko, ale popφÜem iba jedno. Predpokladajme, ₧e mßme nasledovn· tabu╛ku News :
Nßzov stσpca |
Typ hodn⌠t |
News_ID |
int (priΦom je tento atrib·t zßrove≥ primßrnym kσ·Φom a tie₧ "identity") |
News_Title |
varchar(50) |
News_Date |
datetime |
Z danej tabu╛ky chceme zobrazova¥ polo₧ky, ktorΘ s· X dnφ starΘ. Dole₧itΘ je si uvedomi¥, ₧e oddelenie logiky funkΦnej od logiky databßzovej je
pomerne podstatnß vec, ktorß naprφklad umo₧≥uje meni¥ databßzov² server bez nutnosti zasahova¥ do ASP strßnok. Upravφ sa len databazovß Φas¥. To znamenß,
neodpor·Φa sa "na tvrdo" pφsa¥ SQL prφkaz do ASP strßnky. Miesto toho zostavφme ulo₧en· proced·ru. Ked₧e otßzka je kladenß na SQL Server
tu je prφklad proced·ry uplatnenej na tabulku News :
Set Dateformat dmy
CREATE PROCEDURE Xnew
@days int
AS
SELECT News_ID, News_Title, News_Date
FROM News
WHERE (DATEDIFF(dd, News_Date, getdate()) <= @days) AND (DATEDIFF(dd, News_Date, getdate()) > -1)
ORDER BY News_Date DESC
priΦom proced·ru volßme z ASP strßnky pomocou prφkazu strSQL, kde X je poΦet dnφ teda integer Φφslo :
strSQL = "EXECUTE Xnew @days=" & X
T²m dostaneme sprßvy starΘ X dnφ. Prv² prφkaz nastavφ ak² bude dßtumov² formßt v databßze.
Parameter sa zostavφ pomocou y(year), m(month) a d(day). ZvyÜok je klasickΘ zostavenie proced·ry. Za zmienku stojφ
prφkaz DATEDIFF. Bli₧Üie v preh╛ade Φφslo 2 dole ... ZφskanΘ v²sledku u₧ iba naplnφme do Recordsetu a m⌠₧eme ich
∩a╛ej pou₧i¥.
ProblΘm 2 :
EÜte ∩a╛Üia vec: Neviem, ₧e v akom formßte mßm ma¥ ten dßtumov² stσpec. Mßm
ho ako Datetime momentßlne. ╚φtal som vÜak, ze tieto dßtumovΘ zßle₧itosti s·
dos¥ citlivΘ na formßt dßtumu. Ten sa dß nejak nastavi¥, zmeni¥, urΦi¥? Ale
ke∩ predsa pou₧φvam serverov² dßtum ako na zßpis tak aj na Φφtanie z
databßzy, malo by to by¥, jedno, nie?
RieÜenie 2 :
Tento problΘm poznßm. NajlepÜie je nastavi¥ si v databßze jeden formßt pomocou prφkazu :
Set Dateformat dmy
a v ASP strßnkach u₧ iba upravova¥ dßtum pomocou VBScriptov²ch funkciφ, ktor²ch preh╛ad je ni₧Üie.
Preh╛ad 1.
Preh╛ad u₧itoΦn²ch dßtumovo-Φasov²ch funkciφ vo VBScripte :
DßtovΘ funkcie VBScriptu |
Funkcia |
Syntax |
Ukß₧ka |
Now() |
|
11.4.2000 17:20:26 |
Time() |
|
17:20:26 |
Date() |
|
11.4.2000 |
Day() |
Day(dßtum) |
11 |
Month() |
Month(dßtum) |
4 |
Year() |
Year(dßtum) |
2000 |
Hour() |
Hour(Φas) |
17 |
Minute() |
Minute(Φas) |
20 |
Second() |
Second(Φas) |
26 |
Weekday() |
Weekday(dßtum,[prv² de≥ t²₧d≥a]) napr.: Weekday(Date(),Monday) |
2 |
Preh╛ad 2.
Preh╛ad dßtumov²ch a Φasov²ch funkciφ v T-SQL.
DßtovΘ funkcie T-SQL |
Funkcia |
Parametre |
Ukß₧ka |
DATENAME(datepart,date)
vyberie menu Φasti dßtumu
|
datepart - year, quarter, month, dayofyear, day, week, weekday, hour, minute, second, millisecond
date - dßtum
|
Select datename(month,getdate())
Result : April
|
DATEPART(datepart,date)
vyberie Φas¥ dßtumu
|
datepart - year, quarter, month, dayofyear, day, week, weekday, hour, minute, second, millisecond
date - dßtum
|
Select datepart(day,getdate())
Result : 11
|
DATEADD(datepart,number,date)
vracia nov· dßtumov· hodnotu vypoΦφtan· na zßklade pridanΘho intervalu ÜpecifikovanΘho dßtumu
|
datepart - year, quarter, month, dayofyear, day, week, weekday, hour, minute, second, millisecond
number - o ko╛ko sa mß zv²Üi¥ danß hodnota
date - dßtum
|
Select dateadd(day,5,getdate())
Result : 2000-04-16 17:07:40.437
|
DATEDIFF(datepart, startdate, enddate)
vracia Φφslo vychßdzaj·ce z porovnania dvoch dßtumov resp. Φasov pomocou parametra datepart
|
datepart - year, quarter, month, dayofyear, day, week, weekday, hour, minute, second, millisecond
startdate - zaΦiatok kalkulßcie
enddate - koniec kalkulßcie
|
Select datediff(day,'04.04.2000',getdate())
Result : 7
|
|
|
|