2016-05-03 7 views
0

これはMS Access 2016に関連しています。というフィールドがあります私は長い文字列を持っています。 フィールドのすべてのレコードには、その中に何らかの文字列とともに1年が記載されています。年は、例えば、常にparanthesisで言及されています。私は新しいフィールドに非常に特定のデータを自動的に入力したいのですが、作成したデータは同じテーブルの既存のフィールドから来ます。

私は 年と呼ばれる別のフィールドを作成したい

ジャック丁

などのネクロ(2007)の

3日までに死んだ少女(1987)の物語...

私はそのレコードの年を自動的に追加したいだけです。私はまた、すべてのレコードの名前フィールドの後のすべての情報を削除したいと思っています。上記の例では、それぞれのレコードから文字「(1987)」を「Jack Ding」と「(2007)on water」から削除したいと考えています。

私はちょうどそれを入力することができます知っているか名前に年からコピー/貼り付け先が、私は4000件の+レコードを持っていると私は、クエリや式やマクロまたはものは何でも(私は真剣に知りませんを構築したいです任意のヘルプを名前フィールドから年だけの情報を取得し、自動的に年にフィールドを、それを入れて、年間自体を含むフィールド()

に記載されている年後にすべて削除されますどのような)アプリケーシングされます

THANKS

答えて

1

あなたは、SQLやVBAでこれを使用することができますが、この表現は、出力(複数存在する場合の回避策はありますが)、任意の単一の文字列で唯一の開き括弧があると仮定すると、正しい値すべきである:

MID([Name],InStr(1,[Name],"(")+1,4)

InStr機能は、最初開き括弧のため[Name]を検索し、文字列にその文字の位置を返します。 Midは、指定された文字数を文字列から抽出しますが、文字列のどこで開始するかを指定する必要があります。一緒にネストすると、InStrMidに、最初の開いている括弧の位置で抽出を開始するよう指示します。+1文字は、その年の最初の桁になります。 Midは、その開始点から4桁を取り、その文字列を返します。

yearフィールドが日付データ型の場合は、文字列を日付データ型に変換するCDateにラップして式を改善できます。あなたがテーブルにyearフィールドに各レコードの年を追加するには、この表現を使用してUPDATEクエリを書くことができます

UPDATE MyTableWithName&Year 
SET Year = CDate(MID([Name],InStr(1,[Name],"(")+1,4)); 

EDIT:私はあなたの質問の削除部分を逃しました。ご覧のとおり、InStrは、最初に開いた括弧の位置を識別するために使用できるので、LEFT関数と同じ方法で使用してタイトル以外のすべてを切り捨てることができます。だから、表現のようなものになるだろう:あなたは2番目のUPDATEクエリでそれを使用することができます

LEFT([Name],InStr(1,[Name],"(")-1)

をSQLコード(私たちは年が抽出される前に切り捨てしたくないので、私は、これらを連続して行うだろう)

UPDATE MyTableWithName&Year 
SET Name = LEFT([Name],InStr(1,[Name],"(")-1); 
関連する問題