Announcement

Collapse
No announcement yet.

Kleines SQL Problem

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Kleines SQL Problem

    Hallo, ich habe folgendes Problem:
    Ich lese mir einen Feldname aus der DB aus und replace dort die "_" durch nix.
    Nun möchte ich nach dem "_" den folgenden Buchstaben groß ausgeben bekommen.
    Weiss jemand wie das geht?
    Anbei die Zeile:

    select @msg = 'pub ' + @propt + ' get' + upper(substring(str_replace(@came,'_',@emptystr),1 ,1)) + lower(substring(str_replace(@came,'_',@emptystr),2 ,50)) + '() {'
    print @msg

    Die Ausgabe sollte so aussehen:

    Aus einen Feld das so heisst: "mdf_ldn_trp"

    soll das mit dem oben gennanten statement ausgebenen werden:

    pub get MdfLdnTrp





    DAnke für eure HILFE

  • #2
    Hallo, hat wirklich niemand eine Idee?

    Comment


    • #3
      Hallo,

      die Reaktionszeit auf eine im Forum gestellte Frage hängt im Wesentlichen von 2 Kriterien ab:

      1. Wie interessant ist die Frage?
      2. Hat man Zeit, das Lösungsbeispiel zusammenzustellen?

      Da Heute Morgen beide Kriterien zutreffen, kann ein Lösungsweg für den MS SQL Server 2005 vorgestellt werden ;-)

      <div style="font-family: Consolas; font-size: 10pt; color: black; background: white;"><p style="margin: 0px;"><span style="color: blue;">DECLARE </span>@In <span style="color: blue;">VARCHAR</span>(19)</p><p style="margin: 0px;"><span style="color: blue;">DECLARE </span>@Tbl <span style="color: blue;">TABLE </span>(s <span style="color: blue;">VARCHAR</span>(19))</p><p style="margin: 0px;"><span style="color: blue;">DECLARE </span>@i <span style="color: blue;">INT</span></p><p style="margin: 0px;"><span style="color: blue;">SET </span>@i = -1</p><p style="margin: 0px;"><span style="color: green;">-- Inputzeichenkette des Beispiels zuweisen</span></p><p style="margin: 0px;"><span style="color: blue;">SET </span>@In = <span style="color: #a31515;">'mdf_ldn_trp'</span></p><p style="margin: 0px;"><span style="color: blue;">WHILE </span>(Len(@In) &gt; 0)</p><p style="margin: 0px;">&nbsp; <span style="color: blue;">BEGIN</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">SET </span>@i = <span style="color: blue;">CHARINDEX</span>(<span style="color: #a31515;">'_' </span>, @In)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">IF </span>(@i = 0) <span style="color: blue;">AND </span>(LEN(@In) &gt; 0)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">BEGIN</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp; <span style="color: blue;">INSERT INTO </span>@Tbl <span style="color: blue;">VALUES </span>(@In)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">BREAK</span></p><p style="margin: 0px;">&nbsp; <span style="color: blue;">END</span></p><p style="margin: 0px;">&nbsp; <span style="color: blue;">IF </span>(@i &gt; 1)</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">BEGIN</span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp; <span style="color: blue;">INSERT INTO </span>@Tbl <span style="color: blue;">VALUES </span>(<span style="color: blue;">LEFT</span>(@In, @i - 1))</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; &nbsp; <span style="color: blue;">SET </span>@In = <span style="color: blue;">RIGHT</span>(@In, (LEN(@In) - @i))</p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">END</span></p><p style="margin: 0px;">&nbsp; <span style="color: blue;">ELSE </span></p><p style="margin: 0px;">&nbsp;&nbsp;&nbsp; <span style="color: blue;">SET </span>@In = <span style="color: blue;">RIGHT</span>(@In, (LEN(@In) - @i))</p><p style="margin: 0px;"><span style="color: blue;">END</span></p><p style="margin: 0px;"><span style="color: green;">-- Ergebnis MdfLdnTrp zurückliefern</span></p><p style="margin: 0px;"><span style="color: blue;">SELECT CAST</span>(<span style="color: blue;">UPPER</span>(<span style="color: blue;">LEFT</span>(s,1)) + <span style="color: blue;">RIGHT</span>(s, LEN(s) - 1) <span style="color: blue;">AS VARCHAR</span>(19)) <span style="color: blue;">AS </span>[text()]</p><p style="margin: 0px;"><span style="color: blue;">FROM </span>@Tbl <span style="color: blue;">FOR </span>XML PATH(<span style="color: #a31515;">''</span>) </p></div>

      Beim SQL Server 2005 wäre eine SQLCLR-Implementierung als benutzerdefinierte Funktion eleganter als der reine T-SQL-Weg. Wenn die T-SQL-Implementierung auch auf dem SQL Server 7/2000 laufen soll, muss der letzte FOR XML PATH-Teil ersetzt werden.

      Comment


      • #4
        hallo, ersteinmal vielen Dank für die Antwort.
        ich arbeite auf Sybase. da beisst sich die syntax ein wenig.
        Evtl. auch ne Idee wie man das unter Sybase löst?


        Merci

        Comment


        • #5
          Hallo,
          nein, zum Glück habe ich in 99% der Fälle nur mit dem MS SQL Server zu tun. Die lokale TABLE-Variable kann man durch eine temporäre Tabelle ersetzen. Für die Zeichenkettenfunktionen (CHARINDEX, LEFT, RIGHT, UPPER) muss es auch dort etwas vergleichbares geben, was in einer benutzerdefinierten Funktion zusammengemixt werden kann. Der letzte Schritt - das Zusammenketten der einzelnen Datensätze der temporären Ergebnismenge - wird wohl der größte Brocken sein.

          Comment

          Working...
          X