Hin und Wieder brauche ich mal eine Ablage für Codeschnipsel, welche ich nicht soo oft brauche, als dass ich sie auswendig kenne, mir jedoch einen (vermeintlich) großen Nutzen bringen können.
SET @rownum=0; SELECT (@rownum:=@rownum+1) AS row_number, domain from domains
select bytes, LOG2(bytes), concat_ws(' ',round(bytes/pow(2,floor(log2(bytes)/10)*10),2) ,
case (floor(log2(bytes)/10))
when 1 then 'KiB'
when 2 then 'MiB'
when 3 then 'GiB'
when 4 then 'TiB'
else 'bytes' end) as formattedSize
CREATE FUNCTION byte_format (bytes BIGINT) RETURNS CHAR(50)
RETURN LPAD(
CASE WHEN bytes<1024
THEN CONCAT(bytes, ' bytes')
ELSE CONCAT_WS(' ',
ROUND(bytes/POW(2,FLOOR(LOG2(bytes)/10)*10),2) ,
CASE (floor(log2(bytes)/10))
WHEN 1 THEN 'KiB'
WHEN 2 THEN 'MiB'
WHEN 3 THEN 'GiB'
WHEN 4 THEN 'TiB'
ELSE 'XXX'
END)
END,15,' ') ;
Usage: SELECT byte_format(1024)
Gegeben sei folgende Beispieldatei:
<?xml version="1.0" encoding="UTF-8"?> <Personen> <Person id="1" sex="m"> <name>Mustermann</name> <vorname>Max</vorname> <plz>12345</plz> <ort>Köln</ort> </Person> <Person id="2" sex="f"> <name>Musterfrau</name> <vorname>Maria</vorname> <plz>67890</plz> <ort>Knuffingen</ort> </Person> </Personen>
| alle Vornamen | //vorname1) |
|---|---|
| Name der Person mit id = 1 | //Person[attribute::id='1']/nameoder //Person[@id='1']/name |
| Vornamen länger als drei buchstaben | //vorname[string-length()>3] |
| Orte mit PLZ < 50000 | /Personen/Person[./plz/text() < '50000']/ort |
| ID der letzten Person | /Personen/Person[count(/Personen/Person)]/attribute::idoder /Personen/Person[last()]/@id |
| Ausgabe aller Textknoten | //self::text() |
| Ausgabe aller Werte (name, vorname …) der ersten Person | /Personen/Person[1]/* |
| Ausgabe aller Attribute (id, sex) der ersten Person | /Personen/Person[1]/@* |
Links:
//child::*[name()='vorname']