5

ユーザー入力フィールドがカンマ区切りの文字列として格納されているデータベースを継承しました。知っている。ラメ。さまざまな文字数の 3 つのセグメントがある SELECT クエリでこれらのフィールドを解析する方法が必要です。フィールドを新しいテーブルに挿入するか、これを行うストアド プロシージャを作成するというすべての推奨事項に反して、これが私が思いついたものです。これを選択クエリとして実行することに誰かが欠陥を見ているのではないかと思っています(必要に応じて、文字列から解析済みに簡単に変換し、元に戻すことができます)。

Field_A
5,25,89

したがって、最も簡単な左側のセグメントを取得するには、次のようにします。

Field_1: Left$([Field_A],InStr([Field_A],",")-1)

一番右のセグメントを取得するには:

Field_3: Right$([Field_A],Len([Field_A])-InStrRev([Field_A],","))

中間セグメントが最もトリッキーでした:

Field_2: Mid([Field_A],InStr([Field_A],",")+1,InStrRev([Field_A],",")-InStr([Field_A],",")-1)

したがって、結果は次のとおりです。

Field_1   Field_2   Field_3
5           25        89

賛同意見は?

4

3 に答える 3

6

さて、あなたがこの道を進むことを主張するならば……これはより簡単でより適応性があるかもしれません。モジュールに関数を作成します。

Public Function GetValueFromDelimString(sPackedValue As String, nPos As Long, 
                                        Optional sDelim As String = ",")

Dim sElements() As String

sElements() = Split(sPackedValue, sDelim)
If UBound(sElements) < nPos Then
    GetValueFromDelimString = ""
Else
    GetValueFromDelimString = sElements(nPos)
End If

End Function

これで、クエリで次のような文字列の任意のフィールドを取得できます。GetValueFromDelimString([MultiValueField]、0)AS FirstElement、GetValueFromDelimString([MultiValueField]、1)ASSecondElementなど。

私は未成年者のためにビールを買っているような気がして、この種の行動を奨励しています:)

于 2013-02-01T21:18:55.703 に答える