Portal > Foren > Datenbanken, Server, Betriebssysteme und sonstige Programmiersprachen > Datenbanken > SQL, Zahlen auf zwei Stellen mit Nullen auffüllen, vgl. sprintf()
Antwort
 
Themen-Optionen
Alt 19.04.2007, 12:59 Nach oben    #1
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.471
Standard SQL, Zahlen auf zwei Stellen mit Nullen auffüllen, vgl. sprintf()

Hallo,
ich wüsste gerne, ob es eine Anweisung in SQL gibt, die die selbe Funktionalität hat, wie ein
PHP-Code:
sprintf('%02d'$var); 
Quasi auf zwei Stellen mit Nullen auffüllen, falls es sich bei $var um eine einstellige Zahl handelt.

Im konkreten Fall geht es mir dabei um das Auslesen eines Tages mit DAY()
Code:
SELECT DAY(t.timestamp) FROM sample_table AS t
Geht dies nicht, so arbeite ich nachträglich mit sprintf(), aber wäre halt schon fein, wenn das machbar und vor allem performant wäre.

Danke für die Antworten.
Grüße, Ben.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.04.2007, 14:02 Nach oben    #2
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 826
Standard

LPAD
http://dev.mysql.com/doc/refman/5.0/...#function_lpad

Gegenenfalls auch einfach ZEROFILL setzen.

Mit DATE_FORMAT geht es auch ... ist halt die Frage, ob das Sinn macht (wie t.timestamp formatiert ist).

Basti

Geändert von Basti (19.04.2007 um 14:06 Uhr).
Basti ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.04.2007, 22:22 Nach oben    #3
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.471
Standard

Danke. Ist das schneller, als die entsprechende Funktionalität in PHP? Hast du oder wer anders da Erfahrungswerte?
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.04.2007, 12:04 Nach oben    #4
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 826
Standard

Erfahrungswerte? Ich denke, hier helfen nur Messungen und es würde mich wundern, wenn es da einen relevanten Unterschied gäbe.

Basti
Basti ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.04.2007, 22:51 Nach oben    #5
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard

Hab da mal nen Test gemacht - dirty coding, aber ich bin Coding im vim nicht gewohnt
Code:
Testvorbereitungen werden gestartet...
Datenbankverbindung hergestellt.
Test mit LPAD: 93.4497311115
Test mit sprintf: 128.442271948
PHP-Code:
<?php
  ini_set
("max_execution_time"0);
  echo 
"Testvorbereitungen werden gestartet...";

  
$connect mysql_connect("localhost""root""");
  
$db mysql_select_db("test");
  if (!
$db || !$connect) {
    echo 
"Datenbankfehler aufgetreten.".mysql_error();
    exit();
  }
  
  echo 
"<br/>Datenbankverbindung hergestellt.";

  if (isset(
$_GET['init'])) {
    for (
$y 2000$y <= 2010$y++) {
      for (
$m 1$m <= 12$m++) {
        for (
$d 1$d <= 28$d++) {
          
mysql_query("INSERT INTO timebenchmark VALUE('', '".$y."-".sprintf('%02d'$m)."-".sprintf('%02d'$d)."');");
        }
      }
    }
    echo 
"<br/>Datenbank mit Testdaten gefüllt.";
  }

  
$sqlStart microtime(true);
  for (
$i 0$i 1000$i++) {
    
$result mysql_query("SELECT LPAD(DAY(timestempel), 2, \"0\") AS tag FROM timebenchmark;");
    while (
$erg mysql_fetch_assoc($result)) {
      
$temp $erg['tag'];
    }
  }
  
$sqlStop microtime(true);
  
$sqlFirstTest $sqlStop $sqlStart;

  
$sqlStart microtime(true);
  for (
$i 0$i 1000$i++) {
    
$result mysql_query("SELECT DAY(timestempel) AS tag FROM timebenchmark;");
    while (
$erg mysql_fetch_assoc($result)) {
      
$temp sprintf('%02d'$erg['tag']);
    }
  }
  
$sqlStop microtime(true);
  
$sqlSecondTest $sqlStop $sqlStart;

  echo 
"<br/>Test mit LPAD: ".$sqlFirstTest;
  echo 
"<br/>Test mit sprintf: ".$sqlSecondTest;
?>
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.04.2007, 23:19 Nach oben    #6
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 826
Standard

Sicherlich nicht ganz repräsentativ, da MySQL das Ergebnis doch chachen wird und PHP (im anderen Testfall) jedes der 1000 Durchläufe neu ran muss.

Und … von wievielen Messungen ist das abgedruckte Ergebnis der Mittelwert?

Basti
Basti ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.04.2007, 14:22 Nach oben    #7
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.203
Standard

ich tippe mal auf einen Durchlauf mit je 1.000 Einträgen.
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.04.2007, 14:23 Nach oben    #8
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard

Ich hatte mal mit 100 Durchläufen gemacht, und dann die 1000. Das prozentuale Verhältnis ist geblieben. Sind aber nur 2 Messungen gewesen.
Ich hab hier nen 600MHz Lappi dafür genommen, deswegen sind die Werte insgesamt höher als auf nem normalen System... falls es einer von euch auch testen will.

Repräsentativ oder nicht. Es ist sicher nicht verkehrt anzunehmen, dass solche Abfragen und die Ergebnisse in einer Schleife durchlaufen werden.

Wenn du es realistischer machen willst, ich hab interesse an deinem Code...
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.04.2007, 19:32 Nach oben    #9
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 826
Standard

Zitat:
Zitat von Jann Hendrik Beitrag anzeigen
ich tippe mal auf einen Durchlauf mit je 1.000 Einträgen.
…ich meinte, wie viele dieser Messungen, also wie oft das Skript als Ganzes durchlaufen wurde).

Zitat:
Zitat von WarrenFaith Beitrag anzeigen
Repräsentativ oder nicht. Es ist sicher nicht verkehrt anzunehmen, dass solche Abfragen und die Ergebnisse in einer Schleife durchlaufen werden.
Ich denke doch, denn wer wird schon ein und dieselbe Datenbankabfrage 1000 mal hintereinander ohne Modifikation hintereinander ausführen? (…oder auch nur zweimal?)

Zitat:
Zitat von WarrenFaith Beitrag anzeigen
Wenn du es realistischer machen willst, ich hab interesse an deinem Code...
Da bin ich der falsche Ansprechpartner. Ich weiß nichtmal, ob MySQL die Abfrage wirklich cached, gehe aber schwer von aus. Falls ja, gibt es sicherlich eine Möglichkeit, das zu deaktivieren. Die Frage ist halt, ob sich der Aufwand lohnt, da so viel Energie reinzustecken. Ich denke, das wird wohl nur relevant, wenn diese Abfrage wirklich oft durchgeführt wird und zwar in einer Anwendung, die an sich schon "durchoptimiert" ist.

Basti
Basti ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Abkürzung des Wochentags in SQL, vgl. strftime in PHP Ben Datenbanken 4 12.04.2007 16:51
Zugriff auf Wert des vorhergenden Datensatzes in einer SQL Abfrage Jay Datenbanken 5 17.07.2006 15:25


Alle Zeitangaben in WEZ +2. Es ist jetzt 05:57 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44