2009-04-16 16 views
1

、私は列に次の値を持っている私は、私は列から3番目の項目を引っ張ることができるようなクエリ、たとえば「60」を書き込むことができますどのようにMicrosoft Accessの列のMS Access 2003で

0-0-60 
20-0-0-24S 
20.5-0-0-24S 
32-0-0 

「0-0-60」から。私はオプションで第4列も持っていることを覚えておいてください。

+0

複数の値を同じ列に入れてはいけません。それはよく知られている反パターンです。 –

+1

それは素晴らしいジョエルです。ご意見ありがとうございます。しかし、私はこのコラムを作成しませんでした、それは他の人によって私に与えられました。あなたのセイジのアドバイスを作者に渡すようにしましょう。 – Robert4Real

答えて

3

をいくつかの厄介な左/右/ INSTRの仕事をするよりも、あなたがこの機能を一般化したいと思うでしょう、あなたのコードで解析するのはおそらく速く、その後、これに立ち往生している場合デリミタとはどの位置にあるのですか?:

Public Function SplitString(inputString As String) As String 
    Dim TestArray() As String 
    TestArray = Split(inputString, "-") 
    Debug.Print TestArray(2) 
    SplitString = TestArray(2) 
End Function 

あなたはこのようなあなたのクエリでで呼び出すことができます:

SELECT SplitString([MyField]) AS Expr1 
FROM MyTable; 

グッドラック!

+0

また、より良い名前を付けて、特に '下付き文字が範囲外です'というエラーを処理することもできます。 –

-1

私はこのようなインライン式がクエリビルダーツールで(テストされていない)ジョブを実行すると信じています。

right(yourColumnNam, inStrRev(yourColumnName, '-')) 
+0

最後の値を取得します。これは4つの値があるときには機能しません。 –

1

各列に3つ以下のアイテムがありますか?

あなたが値として3つの小数または4つの小数点以下のいずれかの非常に特定のフォーマットを持っている場合は本当に、私は

Value1 decimal 
Value2 decimal 
Value3 decimal 
Value4 decimal (NULLABLE) 

にスキーマを変更することを検討したいが、それは少し的外れだ...

あなたが本当にそれはアクセスSQLクエリで

+0

常に少なくとも3つのアイテムがあります。 – Robert4Real

0

あなたがデータ列を照会するのは簡単ではありませんが、私たちは「匂い」と呼んでいます。

これは、1列に非スカラーデータがあるため、これはファーストノーマルフォーム(1NF)違反のように見えます。私はあなたが一度限りの問題を解決するために、一度のデータスクラブ練習のためにこれらの値を分割していると信じています(結果セットが小さい場合はExcelのテキストを個人的に使用します)。

あなたのアプリケーションのクエリでこれを行うことを提案している場合は、正規化を調べてそれに応じてスキーマを変更することをお勧めします。

関連する問題