Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

MS SQL Abfrage von Datumsbereich per PHP Convert Datetime

Frage Entwicklung Datenbanken

Mitglied: 69304

69304 (Level 1)

04.05.2009, aktualisiert 11:55 Uhr, 10402 Aufrufe, 12 Kommentare

Hallo!

Ich verzweifel bald bezüglich folgender Abfrage per PHP an unserem Microsoft SQL Server:

SELECT * FROM stat_local WHERE (Endedatum <= CONVERT(DATETIME, '2009-02-06 00:00:00.000', 104)) AND (Anfangsdatum >= CONVERT(DATETIME, '2009-02-02 00:00:00.000', 104))

Ich habs auch schon so versucht:

SELECT * FROM stat_local WHERE (Endedatum <= CONVERT(DATETIME, '20090206')) AND (Anfangsdatum >= CONVERT(DATETIME, '20090201'))


Ich komm so leider auf keinen grünen Zweig! Das Datenbankfeld "Endedatum", sowie "Anfangsdatum" hat den Typ datetime(8).


Per Ausgabe in PHP bekomme ich sehr viele Wert, beginnend von 02.02.2009 bis 28.04.2009:

[name]--[nummer]--[2009-03-03 00:00:00.000]--[09:35]--[2008-03-03 00:00:00.000]--[10:15]

[Irrelevant]--[Irrelevant]--[Anfangsdatum]--[Zeit]--[Endedatum]--[Zeit]


Ja, ich weis, dass die Zeit auch komplett als Zeit hinterlegt werden hätte können, aber die Datenbankstruktur ist leider nicht von mir.


Wie müsste die Abfrage lauten, dass ich alles was zwischen z.B. dem 01.02.2009 und dem 07.02.2009 liegt ausgegeben bekomme?


Win Serv 2003 mit Microsoft SQL Enterprise Manager v8.0


Gruß,
René.
Mitglied: maretz
04.05.2009 um 12:20 Uhr
warum lässt du das convert nicht einfach von php übernehmen - so das du

where start_datum>="2009-01-01" and enddatum <="2009-12-31" bekommst?
Bitte warten ..
Mitglied: 69304
04.05.2009 um 13:04 Uhr
hmm.. ok, wieso nicht

Kennst du grad den passenden Befehl? Die Datenfütterung für PHP kann ich gestalten wie ich will, das ist kein Prob.


01.
$datum_von = "01.02.2009"; // Werden nachher per Benutzereingabe übergeben 
02.
$datum_bis = "07.02.2009"
03.
 
04.
list($jahr_von, $monat_von, $tag_von) = split('.', $datum_von); 
05.
$datum_von = $jahr_von . "-" . $monat_von  . "-" . $tag_von
06.
			 
07.
list($jahr_bis, $monat_bis, $tag_bis) = split('.', $datum_bis); 
08.
$datum_bis = $jahr_bis . "-" . $monat_bis  . "-" . $tag_bis; //... usw....
Wie müsste denn die genaue Abfrage in SQL lauten? Die Daten kann ich per PHP bereitstellen, wie sie benötigt werden.
Bitte warten ..
Mitglied: 76109
04.05.2009 um 13:30 Uhr
Hallo rbrixel,

ich habe zwar noch nicht mit MySql gearbeitet, aber theoretisch müsste das auch gehen:

01.
StrComp("20090303",Left(Replace("2009-03-04 00...","-",""),8))   =   < (-1), = (0), > (1) 
Gruß Dieter
Bitte warten ..
Mitglied: ITLocke
04.05.2009 um 13:47 Uhr
Hallo,

evtl hilft die php-Funktion strtotime weiter.

Die SQL-Abfrage wäre dann:
$sql="SELECT ...
WHERE UNIX_TIMESTAMP(Anfangsdatum) <=' ".strtotime($datum_von)."'
AND UNIX_TIMESTAMP(Endedatum) > ' ".strtotime($datum_bis)." ' ";
$erg=mysql_query($sql);
...
ACHTE darauf, dass die Datumsvariablen in einzelnen und doppelten Hochkomma sind.
(die einzelnen für SQL und die doppelten für PHP)

Gruß Locke
Bitte warten ..
Mitglied: Biber
04.05.2009 um 14:24 Uhr
Moin rbrixel,

na, da gehen aber die Tipps auseinander.
Um Dich vollends zu verwirren, meine Varianten.
1) Hör auf maretz' Ratschlag. Sollte gehen.
2) wenn es komplizierter aussehen sollte, dann wäre meine Argumentation
  • Endedatum und Anfangsdatum sind je datetime-Felder, die Vergleichsdaten sind Strings.
  • ergo muss ich doch, wenn ich überhaupt was CONVERTe, die Datumswerte auf eine vergleichbare Stringlänge bringen.

--> dei DATETIME-Feld namens Anfangsdatum auf Format und Länge von '20090206' bringen wäre mit style code 112 = ISO-Format yyyymmdd.
....WHERE CONVERT( Char(8), Anfangsdatum, 112) <= '20090206 .....

wenn es denn unbedingt unleserlich werden soll.
Gleichbedeutend, aber für deutsche Nasen bzw. Augen besser lesbar:
....WHERE CONVERT( Char(8), Anfangsdatum, 104) <= '06.02.2009' .....
...was aber wiederum gleichwertig sein sollte.mit maretz'
.WHERE Anfangsdatum <= '06.02.2009' .....

Grüße
Biber
Bitte warten ..
Mitglied: 69304
04.05.2009 um 15:17 Uhr
Hallo!

Danke erstmal für die Tipps!

Also...

WHERE (CONVERT(Char(8), Anfangsdatum, 104) >= '01.02.2009') AND (CONVERT(Char(8), Endedatum, 104) <= '07.02.2009')

... gibt ALLES zurück. Und...

WHERE (CONVERT(Char(8), Anfangsdatum, 112) >= '20090201') AND (CONVERT(Char(8), Endedatum, 112) <= '20090207')

... gibt zu, sag mal so um die 85%, richtig zurück.

Teilweiße kommen dann aber Einträge mit (in der HTML-Ausgabe) 2009-03-27 00:00:00.000 und 2009-02-28 00:00:00.000 und 8200-11-02 00:00:00.000 (gut, dass ist eine Benutzer-Falsch-Eingabe, sollte aber trotzdem nicht angezeigt werden...

? ? ?
Bitte warten ..
Mitglied: Biber
04.05.2009 um 15:45 Uhr
Moin rbrixel,

jau, hast natürlich Recht....
Da ich nun alles auf STRING gepresst habe kann logischerweise ein STRING-Vergleich mit "<='07.02.2009'" nur Grütze erzeugen...
Menno.... hab ich doch im Batch-tut "Umgang mit Datumsvariablen im Batch" selbst in epischer Breite noch breiter getreten, dass sich mit DatumsSTRINGs nur sehr begrenzt rechnen lässt.
Ich hasse Montage.

Nichtsdestotrotz muss natürlich ein Stringvergleich des ANSI- oder ISO-Datums das Gewünschte liefern.

Mit einer Formatierung auf "20090207" oder "2009-02-07" müssen also nicht 85, sondern 100% der Daten zurückkommen.

Wenn nicht-> bitte mach doch mal einen
01.
 SELECT Anfangsdatum,  (CONVERT(Char(8), Anfangsdatum, 112),  
02.
             Endedatum,  (CONVERT(Char(8), Endedatum, 112) 
03.
            FROM DeinGeraffel


Dann sollte ja der (Denk-)Fehler sichtbar werden.

Grüße
Biber
Bitte warten ..
Mitglied: 69304
04.05.2009 um 15:58 Uhr
Hey Danke erstmal Biber!!!

Ich hab...

SELECT Anfangsdatum, (CONVERT(Char(8), Anfangsdatum, 112), Endedatum, (CONVERT(Char(8), Endedatum, 112) FROM stat_local

...ausgeführt. Weisst was ich dann bekomme?

Warning: odbc_exec() [function.odbc-exec]: SQL error: [Microsoft][ODBC SQL Server Driver][SQL Server]Zeile 1: Falsche Syntax in der Nähe von ','., SQL state 37000 in SQLExecDirect in abfrage.php on line 16


Ja, shice Montage.... ;)
Bitte warten ..
Mitglied: Biber
04.05.2009 um 17:44 Uhr
*peinlich berührt zu Boden blick*

....tut mir ganz Leid, rbrixel,

Ich hab da ja auch zwei ganz überflüssige öffnende runde Klammern zuviel reingebracht....
...jeweils vor dem Wort CONVERT.
bzw. zwei schließende runde Klammern zuwenig, aber das wäre rausgeredet..

Letzter Montags-Rettungsversuch für heute:

01.
SELECT Anfangsdatum,  
02.
          CONVERT(Char(8), Anfangsdatum, 112),  
03.
           Endedatum,  
04.
           CONVERT(Char(8), Endedatum, 112)  
05.
FROM stat_local
Sorry sorry sorry.....

Biber
Bitte warten ..
Mitglied: 69304
05.05.2009 um 08:33 Uhr
k... ;)

Hätte ich eigentlich auch selber sehen sollen - aber da gestern ja Montag war und ich einfach nur Copy+Paste gemacht habe, war ja klar, dass ein Fehler auftreten musste... ;D


Jetzt sieht die Sachlage schon anders aus! Nun bekomme ich folgendes Feedback der DB:

[ 2002-10-15 00:00:00.000 ]--[ 20021015 ]--[ 2002-12-06 00:00:00.000 ]--[ 20021206 ]


Und ich habs nun wunderbar kompliziert gemacht, dass in Zukunft nur ich weiss wie´s geht... ;)

SELECT * FROM STOERUNGENHIST WHERE CONVERT(Char(8), Anfangsdatum, 112) >= CONVERT(Char(8), '20090201', 112) AND CONVERT(Char(8), Endedatum, 112) <= CONVERT(Char(8), '20090207', 112)


Danke Biber!!!
Bitte warten ..
Mitglied: alibaba24
23.06.2014 um 20:50 Uhr
geht auch so: MSSQL 10.5 R2

where dtFeld >= ('08.04.2013 00:00:00.000') and dtFeld <= ('08.04.2013 23:59:59.000')

wenn dtFeld Type datetime ist
Bitte warten ..
Mitglied: maretz
23.06.2014 um 22:47 Uhr
Nett... Aber nach über 5(!!!5) Jahren doch etwas spät, ich denke er hats zwischenzeitlich hinbekommen oder aufgegeben...
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(2)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
PHP
gelöst PHP Dropdownmenü mit SQL-Abfrage (4)

Frage von tobmes zum Thema PHP ...

Datenbanken
gelöst SQL-Abfrage - DISTINCT - letztes Datum (3)

Frage von emeriks zum Thema Datenbanken ...

Datenbanken
SUM oder AVG in SQL Abfrage dauert viel zu lange warum? (5)

Frage von samet22 zum Thema Datenbanken ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...