导入带有多个分隔符的平面数据
Import Flat Data with Multiple Delimiters
我导入的平面文件已导入到 SQL 中,带有逗号分隔符。
我的文本文件示例如下:
Location\Floor\Room,Date,Value
导入后:
Column 1 | Column 2 | Column 3
Location\Floor\Room | Date | Value
我希望我的 table 看起来像这样:
Column 1 | Column 2 | Column 3 | Column 4 | Column 5
Location | Floor | Room | Date | Value
有什么方法可以达到上面的效果吗?
我正在考虑这个解决方案。
select t2.col1
, t2.col2
, substring(t2.col3, charindex('\', t2.col3, len(t2.col2) + len(t2.col1)) + 1, len(t2.col3) - (len(t2.col2) + len(t2.col1) + 2))
, t2.[value], t2.[date]
from (
select t1.col1, substring(t1.main, len(t1.col1) + 2
, charindex('\', t1.main, len(t1.col1) + 2) - (len(t1.col1) + 2)) as col2
, t1.main as col3, t1.[value], t1.[date]
from (
select substring(column1, 0, charindex('\', column1)) as col1, column1 as main, [date], [value]
from tableA
) t1
) t2
这适用于未分割字符串的 MAX 5 值
val1\val2\val3\val4\val5
select [1] as col1, [2] as col2, [3] as col3, [4] as col4, [5] as col5, col2 as col7, col3 as col8
from (
select ROW_NUMBER() over(partition by col1 order by col1) rowid, col1, col2, col3, value
from <MyTable>
cross apply string_split(s.col1, '\')
) as tbl
pivot (
max(value) for rowid in ([1], [2], [3], [4], [5])
) as pv
SSIS - SQL Server Integration Service
也可用于此用例。
您基本上需要的是一个两步转换过程,您可以在中间 table 加载输入文件,这允许 comma
作为标准分隔符。
一旦,你有临时 table 可用和记录(包括带有 backslash
的记录),你应该在 SSIS 中使用 Derived Column Task
并创建一个自定义逻辑基于SUBSTRING() and FINDSTRING()
方法创建新列以根据 backslash
拆分字符串
我导入的平面文件已导入到 SQL 中,带有逗号分隔符。 我的文本文件示例如下:
Location\Floor\Room,Date,Value
导入后:
Column 1 | Column 2 | Column 3
Location\Floor\Room | Date | Value
我希望我的 table 看起来像这样:
Column 1 | Column 2 | Column 3 | Column 4 | Column 5
Location | Floor | Room | Date | Value
有什么方法可以达到上面的效果吗?
我正在考虑这个解决方案。
select t2.col1
, t2.col2
, substring(t2.col3, charindex('\', t2.col3, len(t2.col2) + len(t2.col1)) + 1, len(t2.col3) - (len(t2.col2) + len(t2.col1) + 2))
, t2.[value], t2.[date]
from (
select t1.col1, substring(t1.main, len(t1.col1) + 2
, charindex('\', t1.main, len(t1.col1) + 2) - (len(t1.col1) + 2)) as col2
, t1.main as col3, t1.[value], t1.[date]
from (
select substring(column1, 0, charindex('\', column1)) as col1, column1 as main, [date], [value]
from tableA
) t1
) t2
这适用于未分割字符串的 MAX 5 值
val1\val2\val3\val4\val5
select [1] as col1, [2] as col2, [3] as col3, [4] as col4, [5] as col5, col2 as col7, col3 as col8
from (
select ROW_NUMBER() over(partition by col1 order by col1) rowid, col1, col2, col3, value
from <MyTable>
cross apply string_split(s.col1, '\')
) as tbl
pivot (
max(value) for rowid in ([1], [2], [3], [4], [5])
) as pv
SSIS - SQL Server Integration Service
也可用于此用例。
您基本上需要的是一个两步转换过程,您可以在中间 table 加载输入文件,这允许 comma
作为标准分隔符。
一旦,你有临时 table 可用和记录(包括带有 backslash
的记录),你应该在 SSIS 中使用 Derived Column Task
并创建一个自定义逻辑基于SUBSTRING() and FINDSTRING()
方法创建新列以根据 backslash