Avatar billede faroe Nybegynder
23. august 2004 - 11:48 Der er 28 kommentarer og
1 løsning

Hjælp til sql med mssql!

Problemet er at datoen som jeg for fra databaser er timecode = 1065078000 så for jeg problemer når jeg bruger  Between
N.B.1065078000 = 23-08-2004

Hvis jeg prøver at bruge timecode får jeg bare en fejl
$StartOfMonth = "01-08-2003";
$EndOfMonth = "31-08-2004";

//$StartOfMonth ="1091314800";
//$EndOfMonth = "1093906800";

$queryDate ="SELECT * FROM Tabel
WHERE dato
BETWEEN $StartOfMonth AND $EndOfMonth";
Avatar billede detox Nybegynder
23. august 2004 - 11:58 #1
Du bliver nødt til at konvertere den/de variabler der har et andet format, så du kan lave forespørgslen med et ensartet format (hvadenten det er unix eller date).
Avatar billede detox Nybegynder
23. august 2004 - 11:59 #2
Jeg forstår bare ikke helt hvad format de enkelte variabler har i denne:

$queryDate ="SELECT * FROM Tabel
WHERE dato
BETWEEN $StartOfMonth AND $EndOfMonth";
Avatar billede faroe Nybegynder
23. august 2004 - 12:19 #3
Vorden konvertere jeg den til variabler?
Avatar billede detox Nybegynder
23. august 2004 - 12:25 #4
Jeg får:

1065078000 = 02-10-2003 og IKKE: 1065078000 = 23-08-2004
1093212000 = 23-08-2004

måske det er problemet?
Avatar billede faroe Nybegynder
23. august 2004 - 12:40 #5
Hvis jeg bruger timecode og ikke data "Datetime" for jeg den fejl.

Warning: (null)(): Invoke() failed: Exception occurred. Source: Microsoft OLE DB Provider for ODBC Drivers Description: [Microsoft][ODBC SQL Server Driver][SQL Server]Arithmetic overflow error converting expression to data type datetime. in c:\temp\mssql.php on line 38

Fatal error: Call to a member function on a non-object in c:\temp\mssql.php on line 42
Avatar billede faroe Nybegynder
23. august 2004 - 12:42 #6
detter er min php kode

<?php

$StartOfMonth = "1065078000";// "01-08-2003";
$EndOfMonth = "1065078000"; //31-08-2004";

//$StartOfMonth ="1091314800";
//$EndOfMonth = "1093906800";

$queryDate ="SELECT * FROM Teble
WHERE Dato
BETWEEN $StartOfMonth AND $EndOfMonth";
$queryDate2 ="SELECT * FROM Teble";

$queryDate3 ="SELECT * FROM Teble
WHERE Dato = 23-08-2004";


function dd($ddd) {
$ddd = date("d-m-Y");
return $ddd;
}

$db = new COM("ADODB.Connection");
$dsn = "DRIVER={SQL Server}; SERVER={0.0.0.0};UID={xxx};PWD={xxx}; DATABASE={Data}";
$db->Open($dsn);
$rs = $db->Execute($queryDate);

while (!$rs->EOF)
{
            $fv1 = $rs->Fields("Dato");
            $fv1 =$fv1->value;

  echo $rs->Fields['Dato']->Value."<BR>";
  echo dd($fv1)."<BR>";

  $rs->MoveNext();
}


?>
Avatar billede detox Nybegynder
23. august 2004 - 12:43 #7
Hvis du fx ønsker udtræk fra august 2004, kunne du prøve:

$queryDate ="SELECT * FROM Tabel
WHERE MONTH(dato)=8 AND YEAR(dato)=2004
Avatar billede detox Nybegynder
23. august 2004 - 12:46 #8
Men dine tal passer jo heller ikke. Fx:

$StartOfMonth = "1065078000";// "01-08-2003"; // FORKERT

$StartOfMonth = "1065078000";// "02-10-2003"; // RIGTIGT
Avatar billede detox Nybegynder
23. august 2004 - 12:50 #9
WHERE Dato = 23-08-2004"; // er osse forkert.
Et DATATIME felt har formatet: 'DD-MM-YYYY'. Altså:

WHERE Dato = '2004-08-23'
Avatar billede detox Nybegynder
23. august 2004 - 12:51 #10
Et DATATIME felt har formatet: 'DD-MM-YYYY'.

Sludder og vrøvl. Omvendt selvfølgelig: 'YYYY-MM-DD'.
Avatar billede faroe Nybegynder
23. august 2004 - 12:54 #11
den for jeg til at fungere:)

WHERE MONTH(dato)=8 AND YEAR(dato)=2004

men ikke den WHERE Dato = '2004-08-23'
Avatar billede detox Nybegynder
23. august 2004 - 13:09 #12
Får du en fejlmelding?
Avatar billede detox Nybegynder
23. august 2004 - 13:16 #13
Hvilken felttype bruger du nu til 'dato' DATE eller DATETIME?
Avatar billede faroe Nybegynder
23. august 2004 - 13:16 #14
Nej, jeg for bare ingen data, på min side.
Avatar billede faroe Nybegynder
23. august 2004 - 13:18 #15
Jeg bruger datetime
Avatar billede detox Nybegynder
23. august 2004 - 13:23 #16
Arh ok. Så prøv:

WHERE TO_DAYS(Dato) = TO_DAYS('2004-08-23')
Avatar billede faroe Nybegynder
23. august 2004 - 13:50 #17
for den fejl

Warning: (null)(): Invoke() failed: Exception occurred. Source: Microsoft OLE DB Provider for ODBC Drivers Description: [Microsoft][ODBC SQL Server Driver][SQL Server]'TO_DAYS' is not a recognized function name. in C:\Inetpub\mssql.php on line 58
Avatar billede detox Nybegynder
23. august 2004 - 13:59 #18
Det var da pudsigt. Jeg skulle ellers mene TO_DAYS() har været med længe.
Hvis du alligevel kun har brug for datoer kunne du så ikke ændre felttype til DATE? Så vil:

WHERE Dato = '2004-08-23'

sikkert virke.
Avatar billede detox Nybegynder
23. august 2004 - 14:01 #19
Alternativt måske:

WHERE LEFT(dato, 10) = '2004-08-23'
Avatar billede faroe Nybegynder
23. august 2004 - 14:04 #20
Det er faktisk et lille problem da jeg trekker data ud af Navision, så hvis jeg forandrer felt typen so kommer det til at give problemer i  Navision.
Avatar billede faroe Nybegynder
23. august 2004 - 14:04 #21
Prøver lige den WHERE LEFT(dato, 10) = '2004-08-23'
:)
Avatar billede detox Nybegynder
23. august 2004 - 14:11 #22
Et andet alternativ kunne være:

WHERE dato LIKE '2004-08-23%' // Husk procenttegnet
Avatar billede faroe Nybegynder
23. august 2004 - 14:13 #23
Hvis jeg bruger den så sær datoen ud som den  Fx 'sep 27 2002'

fx
WHERE LEFT(dato, 12) = 'sep 27 2002'";
Avatar billede detox Nybegynder
23. august 2004 - 14:20 #24
'sep 27 2002' er jo ikke et DATETIME format?
Avatar billede detox Nybegynder
23. august 2004 - 14:22 #25
Arh, undskyld mig jeg troede vi snakkede MySQL og ikke MsSQL :o(
Avatar billede detox Nybegynder
23. august 2004 - 14:23 #26
Avatar billede faroe Nybegynder
23. august 2004 - 14:24 #27
Hvis jeg sætter left til 20 tegn så kommer den ud med den 'sep 27 2002 12:00AM'

fx
WHERE LEFT(dato, 20) = 'sep 27 2002 12:00AM'";
Avatar billede faroe Nybegynder
23. august 2004 - 14:31 #28
Den fungerer find
"SELECT * FROM table WHERE DAY(dato)=18 AND MONTH(dato)=8 AND YEAR(dato)=2004"

så du for dine velfortjente points :)

jeg kan jo bare lave en

funktion til den, som jeg bruger i sql'en.

Tussen tak for hjælpen :)

Giv mej lige et svar:)
Avatar billede detox Nybegynder
23. august 2004 - 14:51 #29
Ok så, hvis du fik løst problemet. Velbekommen :O)
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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