Frage

Wer weiß, wie diese Zeichenfolge drehen: "Smith, John R"
In diese Zeichenfolge: "jsmith"

?

Ich brauche alles mit niedriger ()
in Kleinbuchstaben Finden Sie, wo das Komma und verfolgen es ist integer Ortswert
Holen Sie sich das erste Zeichen nach dem Komma und legt es vor dem String
Dann erhält die gesamten Nachnamen und kleben Sie es nach dem ersten Anfang.
Nebenbei bemerkt - instr () Funktion ist nicht kompatibel mit meiner Version
Vielen Dank für jede Hilfe!

War es hilfreich?

Lösung

Starten Sie durch Ihre eigene Funktion INSTR Schreiben - es zum Beispiel my_instr nennen. Es wird bei char 1 und Schleife beginnen, bis er einen findet ‚‘.

Dann benutzen, wie Sie es INSTR.

Andere Tipps

Der beste Weg, dies zu tun, wird unter Verwendung von Oracle Reguläre Ausdrücke kennzeichnen, wie folgt aus:

SELECT LOWER(regexp_replace('Smith, John R', 
             '(.+)(, )([A-Z])(.+)', 
             '\3\1', 1, 1)) 
  FROM DUAL;

Das sagt, 1), wenn Sie das Muster eines Satzes von Zeichen finden, gefolgt von „“ von einem Großbuchstaben, gefolgt von verbleibenden Zeichen folgt, nehmen Sie das dritte Element (Initial des Vornamens) und fügen Sie die Nachname. Dann ist alles in Kleinbuchstaben machen.

Ihre Randnotiz: „instr () Funktion mit meiner Version nicht kompatibel ist“ nicht Sinn für mich, wie die Funktion herum für Alter gewesen ist. Überprüfen Sie Ihre Version, weil Reguläre Ausdrücke wurde nur zu Oracle in der Version 9i hinzugefügt.

Danke für die Punkte.

- Stew

instr () ist nicht mit Ihrer Version von dem, was kompatibel? Orakel? Sind Sie mit der Version 4 oder etwas?

Es gibt keine Notwendigkeit, Ihre eigene Funktion zu erstellen, und ehrlich gesagt, scheint es eine Verschwendung von Zeit, als diese ziemlich leicht mit SQL-Funktionen durchgeführt werden kann, die bereits existieren. Es muss darauf geachtet werden, für schlampige Dateneingabe zu berücksichtigen.

Hier ist ein weiterer Weg, um Ihr erklärtes Ziel zu erreichen:

with name_list as
  (select '   Parisi, Kenneth R' name from dual)
select name
      -- There may be a space after the comma.  This will strip an arbitrary
      -- amount of whitespace from the first name, so we can easily extract
      -- the first initial.
     , substr(trim(substr(name, instr(name, ',') + 1)), 1, 1) AS first_init
      -- a simple substring function, from the first character until the
      -- last character before the comma.
     , substr(trim(name), 1, instr(trim(name), ',') - 1) AS last_name
      -- put together what we have done above to create the output field      
     , lower(substr(trim(substr(name, instr(name, ',') + 1)), 1, 1)) ||
       lower(substr(trim(name), 1, instr(trim(name), ',') - 1)) AS init_plus_last
  from name_list;  

HTH, Gabe

Ich habe eine harte Zeit zu glauben, Sie haben keinen Zugang zu einem richtigen Instrumenten (), aber wenn das der Fall ist, setzen Sie Ihre eigene Version.

Angenommen, Sie haben die gerade heraus:

select 
  substr( 
      lower( 'Smith, John R' )
    , instr( 'Smith, John R', ',' ) + 2
    , 1 
  ) || -- first_initial
  substr( 
      lower( 'Smith, John R' )
    , 1
    , instr( 'Smith, John R', ',' ) - 1 
  ) -- last_name
from dual;

Auch seien Sie vorsichtig über Ihre Annahme, dass alle Namen in diesem Format sein wird. Achten Sie auf etwas anderes als ein Leerzeichen nach dem Komma, Nachnamen Daten wie „Parisi, Jr.“, etc haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top