PHP Tausendertrennzeichen setzen / Money feld konvertieren

Dr-Pepper

Grünschnabel
Hallo Board,

ich stehe vor einem "größeren" problem (zumindest für mich) :(

Ich lese diverse Daten aus einer MSSQL Datenbank aus (Artikelnummer,Kundenartikelnummer,Lagerbestand,Artikelgruppe)
Mein "Problem" dabei ist, das der Wert der in der Spalte Lagerbestand geführt ist in MS SQL als money deklariert ist.
In der Datenbank kann und darf ich diese deklaration nicht verändern.

Demnach erhalte ich bei der ausgabe den Lagerbestandswert von z.b. 10,000.00 (Zehntausend)
Wie bewerkstellige ich es, das die .00 verschwindet?

Hier noch der Quellcode ...
PHP:
<table>
<tr>
<td width="850"><hr></td>
</tr>
</table>
<?
 $artikel = $_POST["airplus"];

echo "<p>Bestandsliste:<b>",$artikel,"</b></p>";
?>
<table>
<tr>
<td width="850"><hr></td>
</tr>
</table>
<p>Artikel mit Bestand '0' sind in diesen Listen nicht beruecksichtigt.</p>
<table>
<tr>
<td width="850"><hr></td>
</tr>
</table>

<table border="0" cellpadding="10">
   <tr><p>
      <th align="right"><p>Artikelnummer</p></th>
      <th align="right"><p>Artikelbezeichnung</p></th>
      <th align="right"><p>Lagerbestand</p></th>
      <th align="right"><p>Artikelgruppe</p></th></p>
   </tr>
<?php
        $artikel = $_POST["airplus"];
?>
<?php
include 'config.php';
setlocale(LC_ALL, 'de_DE');
   if ($artikel == 'Gesamt')
        {
$query="SELECT KHKArtikelkunden.Referenznummer
                        ,KHKArtikel.Bezeichnung1
                        ,CONVERT( varchar, CONVERT( money , KHKArtikelVarianten.Lagerbestand ), 3 )
                        ,KHKArtikel.Artikelgruppe
FROM (KHKKontokorrent
LEFT JOIN KHKArtikelkunden ON KHKArtikelkunden.Kunde = KHKKontokorrent.Kto )
LEFT JOIN KHKArtikelVarianten ON KHKArtikelkunden.Artikelnummer = KHKArtikelVarianten.Artikelnummer
LEFT JOIN KHKArtikel ON KHKArtikelkunden.Artikelnummer = KHKArtikel.Artikelnummer

WHERE KTO = 11207 AND KHKArtikelVarianten.Lagerbestand != '0,00' OR Artikelgruppe = ''
ORDER BY KHKArtikelkunden.Referenznummer ASC";
        }
   else
        {
$query="SELECT KHKArtikelkunden.Referenznummer
                        ,KHKArtikel.Bezeichnung1
                        ,CONVERT( varchar, CONVERT( money , KHKArtikelVarianten.Lagerbestand ), 3 )
                        ,KHKArtikel.Artikelgruppe
FROM (KHKKontokorrent
LEFT JOIN KHKArtikelkunden ON KHKArtikelkunden.Kunde = KHKKontokorrent.Kto )
LEFT JOIN KHKArtikelVarianten ON KHKArtikelkunden.Artikelnummer = KHKArtikelVarianten.Artikelnummer
LEFT JOIN KHKArtikel ON KHKArtikelkunden.Artikelnummer = KHKArtikel.Artikelnummer

WHERE KTO = 11207 AND KHKArtikelVarianten.Lagerbestand != '0,00' AND Artikelgruppe = '$artikel'
ORDER BY KHKArtikelkunden.Referenznummer ASC";
        }

//Query ausführen und wWrte in Array Speichern
$res = mssql_query($query);
while ($row = mssql_fetch_array($res)) {
echo ("<tr>\n");
       for ($i = 0; $i < 4; $i++) {
          $val = $row[$i];
          #echo number_format($val,'','','.');
          echo ("<td align=\"right\"><p>$val</p></td>\n");
       }
       echo ("</tr>\n");

 }
//result wieder freigeben
  mssql_free_result($res);
include 'footer.html';
?>
Vielleicht ist ja jemand dabei der mir bei diesem Problem die augen öffnet ....

Grüße
Dr-Pepper
 
Zuletzt bearbeitet:
Das einfachste wäre vermutlich im Select das money feld als decimal zu casten/converten.
Code:
Select Cast(Lagerbestand as decimal) as Lagerbestand ...
bzw.
Code:
Select Convert(decimal, Lagerbestand) as Lagerbestand ...
 
oder mit number_format() in php
PHP:
$number = 1234567.89;
echo number_format($number, 0, '.', ',');
//Ausgabe: 1,234,568
 
oder mit number_format() in php
PHP:
$number = 1234567.89;
echo number_format($number, 0, '.', ',');
//Ausgabe: 1,234,568

Das mit dem number_format habe ich ja schon angestestet .. allerdings wirft er mir in der Ausgabe (echo....$val.....) dann auch in der Artikelnummer wirres zeug aus.

Wenn ich eine andere Variante hätte in der ich nicht aus $val alles ausgeben lasse könnte ich nochmals die number_format versuchen.
Nur bin ich ein "blutiger" wiederanfänger in sachen PHP:(

Das mit dem Convert / Cast hatte ich auch versucht aber dann bekomm ich die Tausendertrennzeichen wieder nicht ... und diese sollten schon vorhanden sein ...

Grüße
 
Und wie sieht es mit

SQL:
SELECT FORMAT(Lagerbestand, "#,###"), ...

aus?

So sollte doch das Feld gleich in der Abfrage entsprechend formatiert und zurückgegeben werden. Die restlichen (numerischen) Felder kannst du so auch wie gewünscht behandeln.
 
Und wie sieht es mit

SQL:
SELECT FORMAT(Lagerbestand, "#,###"), ...

aus?

So sollte doch das Feld gleich in der Abfrage entsprechend formatiert und zurückgegeben werden. Die restlichen (numerischen) Felder kannst du so auch wie gewünscht behandeln.

Das Resultat mit dem Format .... ist folgendes ...

Warning: mssql_query() [function.mssql-query]: message: 'FORMAT' is not a recognized built-in function name. (severity 15) in /var/www/airplus/abfrage.php on line 76

Warning: mssql_query() [function.mssql-query]: General SQL Server error: Check messages from the SQL Server (severity 15) in /var/www/airplus/abfrage.php on line 76

Warning: mssql_query() [function.mssql-query]: Query failed in /var/www/airplus/abfrage.php on line 76

Warning: mssql_fetch_array(): supplied argument is not a valid MS SQL-result resource in /var/www/airplus/abfrage.php on line 77

Warning: mssql_free_result(): supplied argument is not a valid MS SQL-result resource in /var/www/airplus/abfrage.php on line 88

Das Format habe ich im Select befehl eingefügt (anstatt des convert...) oder war das falsch******
 
So sollte es eigentlich auch sein und bei mir hat es so auch funktioniert.
Der "Befehl" wird hier beschrieben.

Verstehe im Moment nicht woran es liegt das es bei dir nicht geht.
 
Wie wärs dann mit einem ganz stupiden mssql Replace(lagerbestand,'.00','') as Lagerbestand.

Schön ist zwar anders aber was solls.
 
stimmt MSSQL !=mysql .. wobei die Syntax fast identisch ist ...

Das mit dem replace muss ich morgen mal in der Firma versuchen .. für heute ist erstmal feierabend :)

Melde mich morgen dazu nochmals ..

Cheerz
 
Zurück