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";
Annonceindlæg fra Infor
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).
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";
23. august 2004 - 12:19
#3
Vorden konvertere jeg den til variabler?
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?
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
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(); } ?>
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
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
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'
23. august 2004 - 12:51
#10
Et DATATIME felt har formatet: 'DD-MM-YYYY'. Sludder og vrøvl. Omvendt selvfølgelig: 'YYYY-MM-DD'.
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'
23. august 2004 - 13:09
#12
Får du en fejlmelding?
23. august 2004 - 13:16
#13
Hvilken felttype bruger du nu til 'dato' DATE eller DATETIME?
23. august 2004 - 13:16
#14
Nej, jeg for bare ingen data, på min side.
23. august 2004 - 13:18
#15
Jeg bruger datetime
23. august 2004 - 13:23
#16
Arh ok. Så prøv: WHERE TO_DAYS(Dato) = TO_DAYS('2004-08-23')
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
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.
23. august 2004 - 14:01
#19
Alternativt måske: WHERE LEFT(dato, 10) = '2004-08-23'
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.
23. august 2004 - 14:04
#21
Prøver lige den WHERE LEFT(dato, 10) = '2004-08-23' :)
23. august 2004 - 14:11
#22
Et andet alternativ kunne være: WHERE dato LIKE '2004-08-23%' // Husk procenttegnet
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'";
23. august 2004 - 14:20
#24
'sep 27 2002' er jo ikke et DATETIME format?
23. august 2004 - 14:22
#25
Arh, undskyld mig jeg troede vi snakkede MySQL og ikke MsSQL :o(
23. august 2004 - 14:23
#26
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'";
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:)
23. august 2004 - 14:51
#29
Ok så, hvis du fik løst problemet. Velbekommen :O)
Vi tilbyder markedets bedste kurser inden for webudvikling