1

次の情報を含む2つのテーブルがあります。

製品

Name  |    ID   |   

Nameには、行の名前と言語を示す短い文字列が含まれています。

言語

Language   |   ID   |

言語は、上記の[名前]列に含まれているものと同じ部分文字列になります。

私がやりたいのは、LanguageIDという列をProductsテーブルに追加することです。

次に、Name列から言語を示す部分文字列を抽出し、LanguagesテーブルのLanguage列と大文字と小文字を区別しない比較を行います。一致するものが見つかったら、LanguagesテーブルのID値を新しく作成したLanguageID列に挿入して、外部キー関係を作成します。

したがって、たとえば私の製品テーブルには、次のものがあります。

Name                  |   ID
Product 1 - enGlIsh   |   1

私の言語テーブルには、次のものがあります。

Language    |   ID
English     |   77

だから私が私のProductsテーブルに入れたいのは:

Name                   |   ID   |   LanguageID
Product 1 - enGlIsh    |   1    |    77

サブストリングから言語を返す正規表現を作成しましたが、SQLサーバーでこのクエリをどのように使用して構造化できるかわかりません。これどうやってするの ?

これが正規表現です:

Regex regEx = new Regex(@"(.+\s*-\s*.+\s*-\s*.+)\s*-\s*(\w{1,3}\s*-\s*\w{1,3})\s*-\s*.+");
                string language = regEx.Match(   NAME   ).Groups[2].Value.ToString(); 
4

2 に答える 2

1

正規表現は必要ありません。

create table Languages(id int identity(1,1), language varchar(32) )

<anything><space><language_name>言語のリストを取得します(形式は)であると想定しています。

insert Languages
    select distinct 
       right(name,charindex(' ', reverse(name), 1)-1) as [language]
    from products

次に、同じ式を使用して必要に応じて戻って置換/更新し、言語名を取得できます。

于 2012-05-23T16:19:30.517 に答える
0

正規表現は本当に必要ありません。文字列でupperコマンドを使用して、poroduct名に言語が含まれているかどうかを確認してください。このようなもの

insert my_product_lang_table
select p.name, p.id, l.id
from product p, language l
where charindex(upper(l.name),upper(p.name)) != null 
于 2012-05-23T16:17:21.677 に答える