Über die trunc-date Funktion läßt sich ausgehend von einem Datumswert sehr einfach ein abgeleiteter Datumswert ermittelt: bspw. der Jahres-, Quartals-, Monats- oder Wochenanfang. Die 11g Doku erläutert dies an zwei Stellen: http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/functions209.htm#SQLRF06151 bzw. http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/functions242.htm#sthref2718 So liefert select trunc(to_date('06.02.2011'),'q') from dual; das DATUM des Quartalsersten (im Bsp. den 01.01.2011). Wichtig ist, dass trunc immer ein Datum zurückliefert, keinen String. Einige Beispiele anhand des 20.Feb 2011 (ein Sonntag in der 07 KW in 2011): select trunc(to_date('20.02.2011'),'d') from dual; select trunc(to_date('20.02.2011'),'dd') from dual; select trunc(to_date('20.02.2011'),'ddd') from dual; select trunc(to_date('20.02.2011'),'mm') from dual; select trunc(to_date('20.02.2011...
Um für Testzwecke etc. "zufällige" Zahlen / Strings zu erzeugen, gibt es in Oracle die Funktion dbms_random . In Verbindung mit connect by kann so sehr einfach eine beliebige Menge an Zeilen mit Zufallswerten erzeugt werden: SELECT dbms_random.value(1,1000) Z , dbms_random.string('a',20) Txt FROM DUAL CONNECT BY level < 101; * DBMS_RANDOM.VALUE(low, high) + low -> untere Grenze + high -> obere Grenze * DBMS_RANDOM.STRING(opt, len) + opt -> Definiert, was für ein String erzeugt wird + len -> Länge des String + Details zu opt: 'u', 'U' - returning string in uppercase alpha characters 'l', 'L' - returning string in lowercase alpha characters 'a', 'A...
Immer mal wieder kommt das Thema: Ist der Wert eine Zahl oder nicht? Bis Oracle 10g am besten per Translate: translate(spalte,'a0123456789', 'a') gegen null prüfen Anm: Das 'a' ist wichtig! - Translate braucht min. 1 Buchstaben, den es ersetzen soll - Im Bsp wird a durch a ersetzt, 0 durch nix, 1 durch nix, ... 9 durch nix -> Ergebnis: wenn der Rückgabewert null ist, waren nur Ziffern enthalten. Übersichtlicher wird's ab 10g per regular Expressions: REGEXP_LIKE (wert,'^[[:digit:]]{3}$') - Prüft, ob genau 3 Ziffern enthalten sind. Weitere Möglichkeiten und Erläuterungen u.a.: http://www.oracle.com/global/de/community/tipps/regexp/index.html und http://sql-plsql-de.blogspot.com/2009/02/regulare-ausdrucke-in-der-datenbank.html bzw. in der Doku: http://download-uk.oracle.com/docs/cd/B19306_01/server.102/b14200/conditions007.htm#i1048942
Kommentare
Kommentar veröffentlichen