Avatar billede jdavid Nybegynder
14. marts 2004 - 13:08 Der er 16 kommentarer og
1 løsning

sammenligne datoer i en mssql db

Jeg har en dato der ligger som en attribut i basen, den skal sammenlignes med datetime.now og på det grundlag skal jeg finde ud af hvor mange dage der er imellem de to. Hvordan gør jeg nemmest det?
Jeg har hentet den vha. et dataset, men dette er sikkert forkert.
Avatar billede rasmusbg Nybegynder
14. marts 2004 - 13:25 #1
SELECT DATEDIFF(day, pubdate, getdate()) AS no_of_days
FROM titles

Er sakset direkte fra Transact-SQL hjælpen i query analyzeren :o)
Avatar billede icecoder Nybegynder
14. marts 2004 - 13:58 #2
hej,

du skal bruge command.executescalar idet du som jeg kan forstaa kun er interesseret i en vaerdi. brug den sammen med ovenstaaende sql saetning og saa skulle det vaere perfekt :-)
Avatar billede rasmusbg Nybegynder
14. marts 2004 - 14:02 #3
Den query, jeg har postet, returnerer et tal, skal det lige siges :o)
Avatar billede icecoder Nybegynder
14. marts 2004 - 16:08 #4
hey Rasmus,

Det er helt fint. der vil stadig vaere een row og en column med den rigtige vaerdi som scalar metoden vil returnere. om det er et tal eller string er ok idet scalar returnerer et object. efterfolgende kan den castes til f.eks int
Avatar billede jdavid Nybegynder
14. marts 2004 - 18:11 #5
okay, men når jeg skal køre den fra min code behind, kan jeg så ikke sætte den ind i en sqldataadapter?:

days = new SqlDataAdapter("SELECT DATEDIFF(day, pubdate, getdate()) AS no_of_days
FROM titles", myconnection)

hvor kommer command.executescalar ind i billedet? Er day, pubdate attributter i databasen?
Avatar billede rasmusbg Nybegynder
14. marts 2004 - 18:17 #6
days = new SqlDataAdapter("SELECT DATEDIFF(day, din-dato-i-tabellen, getdate()) AS no_of_days FROM din-tabel WHERE et-eller-andet-søgekriterie", myconnection)

Det første argument i DATEDIFF angiver, at det er antal dage, du vil have regnet ud.
Avatar billede icecoder Nybegynder
14. marts 2004 - 18:22 #7
hvis du kun oensker at returnere een vaerdi dvs f.eks
SELECT DATEDIFF(day, pubdate, getdate()) AS no_of_days
FROM titles where id = 1

saa vil din kode se saaledes ud:
query = "SELECT DATEDIFF(day, pubdate, getdate()) AS no_of_days
FROM titles where id = 1";

sqlcommand command = new sqlcommand(connection,query)
object scalarvalue = command.executeScalar();

hvis du derimod forventer at returnere mere end een vaerdi saa vil din code see saaledes ud:
query = "id, SELECT DATEDIFF(day, pubdate, getdate()) AS days
FROM titles";
sqlcommand command = new sqlcommand(connection,query)
sqlreader scalarvalues = command.executereader();

if (scalarvalus.hasrows)
{
  while (scalarvalues.read())
  {
    dosomething(scalarvalues[0],scalarvalues[1])
    }
}

void dosomething(int id,int numberofdays)
{

}
Avatar billede jdavid Nybegynder
14. marts 2004 - 18:39 #8
okay jeg kigger på det om lidt. Det jeg skal lave er en farvekode i et datagrid.
hvis antaldage er <30 skal cellen være grøn, 30-60 dage = gul og >60 = rød

Mange tak for jeres hjælp!

rasmusbg> svar lige, så for du også pts
Avatar billede rasmusbg Nybegynder
14. marts 2004 - 18:41 #9
Her er et svar.
Det var så lidt :o)
Avatar billede jdavid Nybegynder
14. marts 2004 - 18:55 #10
icecoder, nu er dit svar afvist :o(
svar igen så får du pts
Avatar billede rasmusbg Nybegynder
14. marts 2004 - 18:56 #11
Jeg synes nu også Icecoder havde fortjent lidt point... :o)
Avatar billede rasmusbg Nybegynder
14. marts 2004 - 18:58 #12
Jeg kan lige oprette et spørgsmål, så icecoder kan få halvdelen af point'ene..
Avatar billede jdavid Nybegynder
14. marts 2004 - 19:00 #13
Icecoder skal helt sikkert også have 30 pts. Det er bare mig der sidder og koger nu.
Avatar billede jdavid Nybegynder
14. marts 2004 - 23:18 #14
rasmusbg>vil du tjene nogle flere points? du får 50 pts for at forklare mig hvordan jeg kan komme til at arbejde med resultatet af datediffen. Jeg får fint nok beregnet dagene mellem de to datoer, men jeg mangler lige at lave cellen i datagrid'et grøn hvis tallet er under 30 osv.
Jeg troede ellers at jeg kunne trække resultatet ud af datasettet men det ser ikke ud til at kunne lade sig gøre.

Icecoder> Kan du ikke lige poste et svar så du kan få dine velfortjente pts?
Avatar billede jdavid Nybegynder
14. marts 2004 - 23:23 #15
koden ser sådan ud

Dim myConnection As SqlConnection
Dim myCommand As SqlDataAdapter
myConnection = New SqlConnection("SERVER=WIN\db;database=db;uid=USER1; pwd=1234;")
  myCommand = New SqlDataAdapter("SELECT Cust_Name, MS_SQL_ID, DB_SW_TYPE, DB_Patch_Level, DATEDIFF(day, Patchtime, getdate()) AS Status FROM MS_SQL ORDER BY Cust_Name", myConnection)
            Dim ds As DataSet = New DataSet
            myCommand.Fill(ds)
            DataGrid1.DataSource = ds
        DataGrid1.DataBind()
Avatar billede rasmusbg Nybegynder
14. marts 2004 - 23:43 #16
Jdavid > Jeg kan desværre ikke hjælpe dig. Jeg har nemlig ikke erfaring med at kode ASP.
Hvis Icecoder skal ha nogle point, så bliver du nødt til at oprette en nyt spørgsmål, Han kan nemlig ikke svare på dette, da der allerede er et accepteret svar. Jeg er sikker på, Icecoder kan hjælpe dig med at få den celle farvet grøn.
Håber det lykkes for dig :o)
Avatar billede jdavid Nybegynder
14. marts 2004 - 23:49 #17
ok takker for din hjælp anyways
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester