2012-06-26 57 views
-1

我目前已经以这种格式存储我的数据:基本模式识别

Word1 - Word2 - Number.I.Need.To.Extract.Separated.By.Periods - Word3 - Word4 

我想要做的就是写,将设置我刚才创建Number.I.Need.To.Extract.Separated.By.Periods列的更新语句。

什么是我最好的方式来做到这一点,或这样的工作?

我曾试图把它写成如下:

UPDATE Table1 
SET NewColumn = 
       (SELECT SUBSTRING(Column, 19, 14) 
       FROM Table1) 

导致:

子查询返回多个值。当 子查询遵循=,!=,<,< =,>,> =或当子查询用作 表达式时,这是不允许的。该语句已终止。

我该如何解决这个问题?

+0

http://stackoverflow.com/search?q=subquery+returns+more+than+one+row&submit=search – Ben

+0

可能重复:如何在管道上进行分裂分隔字符串变量?](http://stackoverflow.com/questions/7391473/sql-server-2005-how-to-perform-a-split-on-a-pipe-delimited-string-variable) – Ben

回答

1

您不需要子查询,因为更新发生在同一行的“内部”。

这不工作?

UPDATE Table1 SET NewColumn = SUBSTRING(Column, 19, 14) 
0

当涉及到文本分析和字符串操作,regular expressions提供比T-SQL字符串函数更加高效和优雅的解决方案。

您可以编写一个提取模式匹配字符串的CLR User-Defined Function。 [SQL服务器2005年的

UPDATE Table1 SET NewColumn = fn_ExtractPatternMatchingString(Column,pattern)