SQL Abfrage Between

PHPProgi

Mitglied
Hallo zusammen

Ich habe ein Select innerhalb meines PHP Script das ein Datumsbereich ausgeben soll.
Leider bekomme ich aber keine Resultate und auch keine Fehlermeldung.
Im Query Analyser des SQL Servers funktioniert die Abfrage.

PHP:
....AND invoice_date BETWEEN '2007-02-14 00:00:00.000' AND '2007-02-14 23:59:59.000'...

Das Datumsformat entspricht der DB.

Kann hier jemand helfen?
Besten Dank
Gruss Progi
 
Guten Morgen,


ist es eigentlich erforderlich, dass du die Uhrzeit mitschreibst?


bo
 
Hallo

Habe dies gerade im Query Analyser getestet. Es geht auch ohne Zeit.
Umgesetzt im PHP kommt immer noch kein Resultat. Ohne Between funktioniert das Query.

Wie weiter? Hast du noch eine Idee?

Progi
 
Hallo
selbstverständlich....im Query Analyser des SQL Servers funktioniert der Select und gibt drei Records zurück.

Liegt es evtl. am Syntax?

Gruss
 
Zuletzt bearbeitet:
Hallo

der mssql_error() gibt keine Meldung zurück.
den ECHO habe ich auf das Query gemacht. Dieses wird korrekt angegeben.

Hier mal das gesamte Query:

PHP:
$strDoc        = "SELECT * FROM (SELECT distinct d.doc_id as doc_id, sort_order, comp_no, REPLACE(supplier_name,',','')AS supplier_name, supplier_num, CONVERT(char(10), invoice_date, 120) as 
dNeu, REPLACE(CONVERT(varchar(20), CAST(invoice_sum AS money), 1),',','''') AS Gesamttotal, invoice_currency, 
last_acceptor, t4, voucher_num FROM docs as d, acc_data where (status_index = '3' AND comp_no = '" . intval($_POST['compno']) . "') AND Sort_order = '1' AND invoice_date
BETWEEN '2007-02-14 00:00:00.000' AND '2007-02-14 23:59:59.000' AND d.doc_id = acc_data.doc_id
UNION
SELECT distinct d.doc_id as doc_id, sort_order, comp_no, REPLACE(supplier_name,',','') AS supplier_name, supplier_num, CONVERT(char(10), invoice_date, 104) as 
dNeu, '' AS Gesamttotal, invoice_currency, 
last_acceptor, t4, voucher_num FROM docs as d, acc_data where (status_index = '3' AND comp_no = '" . intval($_POST['compno']) . "') AND Sort_order <> '1' AND invoice_date
BETWEEN '2007-02-14 00:00:00.000' AND '2007-02-14 23:59:59.000' AND d.doc_id = acc_data.doc_id) as test where Gesamttotal <> '' ORDER by $Sort ASC";
echo $strDoc;

das Resultat des ECHOS:

SELECT * FROM (SELECT distinct d.doc_id as doc_id, sort_order, comp_no, REPLACE(supplier_name,',','')AS supplier_name, supplier_num, CONVERT(char(10), invoice_date, 120) as dNeu, REPLACE(CONVERT(varchar(20), CAST(invoice_sum AS money), 1),',','''') AS Gesamttotal, invoice_currency, last_acceptor, t4, voucher_num FROM docs as d, acc_data where (status_index = '3' AND comp_no = '10') AND Sort_order = '1' AND invoice_date BETWEEN '2007-02-14 00:00:00.000' AND '2007-02-14 23:59:59.000' AND d.doc_id = acc_data.doc_id UNION SELECT distinct d.doc_id as doc_id, sort_order, comp_no, REPLACE(supplier_name,',','') AS supplier_name, supplier_num, CONVERT(char(10), invoice_date, 104) as dNeu, '' AS Gesamttotal, invoice_currency, last_acceptor, t4, voucher_num FROM docs as d, acc_data where (status_index = '3' AND comp_no = '10') AND Sort_order <> '1' AND invoice_date BETWEEN '2007-02-14 00:00:00.000' AND '2007-02-14 23:59:59.000' AND d.doc_id = acc_data.doc_id) as test where Gesamttotal <> '' ORDER by supplier_name ASC

Ich benutze eigentlich den selben Query wie im Analyser.

Ich hoffe mit diesen Infos kannst du mir Helfen?

Gruss
 
Hi,


setz´ mal die einzelnen Where Bedingungen jeweils in eine Klammer ()

bo
 
Hallo BO

Habe ich gemacht: Leider kein Erfolg :(

Ich habe es nun rausgefunden:

PHP:
...AND 
(CONVERT(char(10), invoice_date, 120) >= '2007-02-14') AND (CONVERT(char(10), invoice_date, 120) <= '2007-03-14')...
:)

Ich danke allen für die Inputs die mich ein Stück näher an die Lösung gebracht haben.

Gruss Progi
 
Zurück