SQL Parse NVARCHAR字段

时间:2014-02-19 14:41:00

标签: sql sql-server parsing ssis

我将Excel中的数据加载到SQL Server 2008上的数据库中。有一列是nvarchar数据类型。该字段包含数据

Text text text text text    text text text text text.
(ABC-2010-4091, ABC-2011-0586,     ABC-2011-0587, ABC-2011-0604)     
Text text text text text    text text text text text. 
(ABC-2011-0562,     ABC-2011-0570, ABC-2011-0575, ABC-2011-0588)    

所以它的文字有很多这样的句子。

对于我需要获取数据ABC-####-####的每一行,我只需要最后一部分。所以例如对于ABC-2010-4091,我需要获取4091。这个数字我需要加入其他表。我想这足以获得格式ABC-####-####的最后部分,然后我应该能够处理请求。

所以上面给出的例子,结果应该是行4091, 0586, 0587, 0604, 0562, 0570, 0575, 0588而不是整个nvarchar值字段。

这有可能吗? nvarchar字段中的文本不同,但我想使用的文本格式(ABC - #### - ####)仍然相同。只有最后一部分的字符数可能会有所不同,因此它不仅有4个数字,而且可能是5个或更多。

获取这些数据的最佳方法是什么?我应该使用SQL Query在SSIS或SQL服务器端解析它吗?怎么样?

我知道这是任务。我感谢每一个帮助或建议如何处理这个问题。我还没有尝试任何东西,因为我不知道从哪里开始。我读过有关SQL解析的文章,但我想要求最好的方法来处理这个任务。

3 个答案:

答案 0 :(得分:0)

Stackoverflow是关于编程的。

坐下来开始编程。

好的,认真的。这是字符串解析,括号中的最后一部分包含多个字段意味着没有批量导入,它不是标准的CSV文件。

您可以在SQL Server中使用SSIS并在那里编写解析程序,或者......为此编写程序。

SQL中的字符串管理是语言中最糟糕的部分,我会避免使用它。

所以,是的,坐下来编写例程。可能是最快的方式。

答案 1 :(得分:0)

如果我理解正确,“ABS - #### - ####”将是列中的值,数字部分的长度是可变的。

如果是这种情况,也许这会奏效。

使用“派生列”转换。 假设我们称之为“ABC - #### - ####”= Column1

SUBSTRING("Column1",(FINDSTRING("Column1","-",2)+1),LEN(Column1)-(FINDSTRING("Column1","-",2)))

如果我没有记错的话,无论该值有多长,都应该在新列中给出最后的#值。

HTH

答案 2 :(得分:0)