我需要将一列拆分为两列。列中的数据当前由短划线(见下文)拆分,并在文本之间加上括号。
列示例:(Data1) - (Data2)
我有一个查询,我使用的数据库是Works,但我在SSIS中创建此表达式时遇到问题。
以下是我在SSMS中使用的查询,它们生成没有短划线和括号的新列:
要将列左侧的数据转换为新列:
SELECT SUBSTRING(REPLACE(REPLACE(REPLACE(COLUMN_NAME,'(',''),')',''),' ',''),0,CHARINDEX('-',
REPLACE(REPLACE(REPLACE(COLUMN_NAME,'(',''),')',''),' ',''))) AS NEW_COLUMN_NAME
FROM TABLE
要将列右侧的数据放入新列:
SELECT SUBSTRING(REPLACE(REPLACE(REPLACE(COLUMN_NAME,'(',''),')',''),' ',''),CHARINDEX('-',
REPLACE(REPLACE(REPLACE(STREKNING_NAVN,'(',''),')',''),' ',''))+1,LEN(REPLACE(REPLACE(REPLACE(COLUMN_NAME,'(',''),')',''),' ',''))) AS NEW_COLUMN_NAME
FROM TABLE
任何人都可以提供任何提示吗?
提前谢谢你。
答案 0 :(得分:0)
我更喜欢用脚本任务来解决字符串操作问题,因为代码比SQL或SSIS表达式中的任何代码都要强大得多。所以它会是这样的:
在脚本任务中执行以下操作(假设输入列命名为" col":
using System.Text.RegularExpressions;
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
string[] columns = Row.col.ToString().Split('-');
Regex reg = new Regex(@"[\(\)]");
Row.Column1 = reg.Replace(columns[0], "");
Row.Column2 = reg.Replace(columns[1], "");
}
因此split函数将字符串转换为数组,我们可以使用正则表达式删除括号。