1

前もって感謝します!私は SQL Server 2008 R2 で作業しています。

私がやろうとしているのは、姓と名を持ち、^ を表示するテキスト型の列があることです。私がしたいのは、^ に至るまでのテキストをキャプチャすることです (本質的に姓と名)。同じテーブル内の別の列 (置換ではない) の一番下に追加します。

charindex を使用してみましたが、インデックス番号を受け取るだけで、^ が表示される前にテキストを取得できないようです。^ の位置を取得するだけで、このテキストチャンクを追加するのに苦労しています同じテーブル内の別のテキスト タイプの列に移動します。このために updatetext 関数を試してみましたが、うまくいかないようです。エラーなしでどこにでも到達できたので、これまでに試したことを破棄しました。

要約すると:

^ 記号に達するまで、テキスト データ型の列の先頭にあるテキストをキャプチャする必要があります。

そのテキストをある種の変数に保存します。

わずかな追加とともに、別のテキスト データ型の列に配置 (追加) します。

簡単なようですが、なかなか難しいので、おすすめを教えてください。ありがとうございました。

4

2 に答える 2

0

^まず、 inの開始位置を見つけましょうcol1

CHARINDEX('^', col1)

LEFT次に、返す文字数を指定して、列の左側の部分を返すために使用します。ただし、^は開始位置にあるため、1 を引く必要があります。

LEFT(col1, CHARINDEX('^', col1) - 1)

次に+( CONCATin 2012+) を使用して、別の列 ( col2) をこれに連結します。

col2 + LEFT(col1, CHARINDEX('^', col1) - 1)

他の追加を行う必要がある場合は、プラスを使用して文字列値を区切ることができます。

'Hello' + ' ' + 'World'

最終的なステートメントは次のようになります。

SELECT col2 + LEFT(col1, CHARINDEX('^', col1) - 1) AS col

アップデート

を持たない値がいくつかある場合は、 「無効な長さパラメーターが LEFT または SUBSTRING 関数に渡されました」というエラーを受信しないようにするステートメント^が必要になります。CASE

SELECT
  CASE
    WHEN CHARINDEX('^', col1) > 0
      THEN LEFT(col1, CHARINDEX('^', col1) - 1)
    ELSE col1
  END AS col
于 2012-10-15T22:00:35.560 に答える
0

CharIndex は、探していた文字の数値位置を示します。目的の部分文字列を取得するには、LEFT や RIGHT などの別の関数でそれを使用する必要があります。これは、^ 文字の前にフィールドの最初の部分を取得する方法です。

SELECT LEFT(SomeField, CharIndex('^', SomeField) - 1)

(部分文字列から ^ を除外するには、1 を引きます。)

于 2012-10-15T21:48:37.243 に答える