1

我有两个包含以下信息的表:

产品

Name  |    ID   |   

Name 包含一个短字符串,指示行的名称和语言。

语言

Language   |   ID   |

语言将是上面名称列中包含的相同子字符串。

我想做的是在我的 Products 表中添加一个名为 LanguageID 的列。

然后,我将从 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

你真的不需要正则表达式,只需在字符串上使用上面的命令,然后查看产品名称是否包含语言。像这样的东西

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 回答