Sql 将一个数据列分隔为两个

Sql 将一个数据列分隔为两个,sql,sql-server,ssis,Sql,Sql Server,Ssis,我目前正在处理一个.txt文件,看起来像这样。(第一个支架前面有一个空间) 数据将进入SQL Server的一列中。我试图将分隔符设置为“条”,但它仍然无法拆分列。我假设吧台前面有一个空间,所以它无法识别它 我需要将此列分为两列,一列为“日期”,另一列为“总计”。使用SSI,最好的方法是什么?我需要SSI,因为一旦数据被分离,我将对其进行一些其他转换 简单的方法是使用派生列转换。你可以用 子字符串(«字符\表达式»,«开始»,«长度») 如果列的长度是静态的。你约会的一个例子是: 子字符串(IN

我目前正在处理一个.txt文件,看起来像这样。(第一个支架前面有一个空间)

数据将进入SQL Server的一列中。我试图将分隔符设置为“条”,但它仍然无法拆分列。我假设吧台前面有一个空间,所以它无法识别它


我需要将此列分为两列,一列为“日期”,另一列为“总计”。使用SSI,最好的方法是什么?我需要SSI,因为一旦数据被分离,我将对其进行一些其他转换

简单的方法是使用派生列转换。你可以用

子字符串(«字符\表达式»,«开始»,«长度»)

如果列的长度是静态的。你约会的一个例子是:

子字符串(INPUTColumn,3(列开始处的字符计数),10(列大小))

如果列的大小不同,那么我将使用scrip任务拆分字符串并自己格式化信息。如果您需要,我可以提供一些示例代码

编辑:我再次查看了您的样本,此时我假设您的克隆大小是动态的。如果是这样的话,最好的方法就是使用临时任务。然后,如果添加“|”和“”以及要拆分的参数,则可以使用.split()将这些行拆分为数组。它们将从原始字符串中删除。然后可以格式化数据并将其输出到数据库

第一步是在ssis中创建字符串参数。它的值应该是您的文件路径。然后将脚本任务添加到数据流中。在编辑器中的“自定义属性”下,将该参数添加到readOnlyVariables

然后按如下方式打开文件:

    byte[] empty = new byte[] { };
    //Outside parameter for the ssisparameter file path
    //Check for the parameter existance
    IDTSVariable100 filePathVariable;
    try
    {
        filePathVariable = this.ReadOnlyVariables["ParameterName"];
    }
    catch (Exception )
    {

    }
    string filePath = filePathVariable.Value.ToString();
这将把文件分割成一个行数组

 private String[] fileLines;
 using (StreamReader reader = new StreamReader(filePath))
        {
            //Read file and split into lines
            string fileStream = reader.ReadToEnd();
            fileLines = fileStream.Split('\n');
        }
创建这样一个包含所有要使用的分隔符的数组

 private char[] delimiters = { ' ', ':', '\n', '\\', '=' };
然后使用如下方式循环您的行:

string[] Tokens = fileLines[index].Split(delimiters);
以上所有内容都应该包含在脚本任务的预执行部分中。这里的想法是将您的所有信息分离到单独的列表中,这些列表将表示列(即日期列表和值列表)

在scrip任务编辑器中,可以将列添加为输出。 然后将其添加到脚本的输出部分:

 for (int i = 0; i < lineCount; i++)
    {
        outputBuffer.AddRow();
        outputBuffer.date = dateList[i];
        outputBuffer.value = valueList[i];
     }
for(int i=0;i
你说的“括号”是指管道吗?为了确保我理解其中的细微差别,分隔符两边都有空格填充,因此“MyDate”SomeValue“对不起,是的,分隔符就是管道。我相信你是对的,两边都有空格。用
搜索并替换
。另存为
.csv
在电子表格(Excel)中打开。将所需的两列另存为
.csv
。我假设SSI可以处理
.csv
文件。@DavidStarkey。对不起,我应该更详细地描述。这需要一个自动化的过程。我们有一个SAP系统,可以将文件放入文件夹中。使用此数据的部门不想接触它。我需要将其导入SSIS包,以便转换某些报表的数据。此作业将每天运行。是的,请。我想看一些例子。脚本任务对我来说有点新,仍在学习中。谢谢你,谢谢你所做的一切。我不熟悉脚本任务,因此这可能需要我一点时间来理解。我的人力资源部门在您完成此操作后不久更改了数据/信息标准,因此我必须查看它是否仍然有效。我又发了一篇关于新标准的帖子。再次感谢你。我看了你的另一篇文章。如果您想为如此复杂的文件编写自动导入,那么很难避免脚本任务。“派生列”可能可以帮助您,但您仍然需要硬编码其中的条件语句。如果你需要更多的帮助,请告诉我。
 for (int i = 0; i < lineCount; i++)
    {
        outputBuffer.AddRow();
        outputBuffer.date = dateList[i];
        outputBuffer.value = valueList[i];
     }