在我的CSV文件中,我有包含以下值的列:
[Location]
1001-AAA-JOE A BLOGS-AAAA0000
1002-BBB-Michael J Jackson-BBBB0000
1003-AAA-Lewis Hamilton-AAAA0000
我需要将此列拆分为sperate列,这对于固定长度字段IE前两个部分和最后三个部分很容易,但中间的可变长度字段证明是困难的!
因此,在上面的示例中,我想获得一个名为NAME的列,其值为;
JOE A BLOGS
Michael J Jackson
Lewis Hamilton
这可能吗?
这是我在select语句中到目前为止的内容;
选择*, 左([位置],InStr([位置],' - ') - 1)作为SITENUMBER, 左((中([位置],InStr([位置],' - ')+ 1)),InStr([位置],' - ') - 2)as牌, left(右([Location],8),2)AS RegionCode,left(right([Location],6),2)AS AreaCode, 左(右([位置],4),4)AS HubCode 来自[CSVExport.csv]
答案 0 :(得分:0)
因此,使用连字符作为分隔符将输入字符串location
拆分为标记,您需要获得第3个标记。
您没有提及您正在使用的DBMS。 ODBC可以连接到任何东西:Oracle,Teradata,Vertica,SQL Server,Informix,Postgres,Ingres,Hive,你可以命名它。
让我们保持乐观,并猜测您的DBMS支持SPLIT_PART()
功能。
然后,试试这个:
WITH
input (location) AS (
SELECT '1001-AAA-JOE A BLOGS-AAAA0000'
UNION ALL SELECT '1002-BBB-Michael J Jackson-BBBB0000'
UNION ALL SELECT '1003-AAA-Lewis Hamilton-AAAA0000'
)
SELECT
SPLIT_PART(location,'-',3) AS name
FROM input;
name
JOE A BLOGS
Michael J Jackson
Lewis Hamilton
select succeeded; 3 rows fetched
答案 1 :(得分:0)
这是基于SQL Server的示例。希望可以帮到你(在你的情况下你可以使用与INSTR类似的方法)。
SN BRAND NAME RegionCode AreaCode HubCode
-------------------- ------------------------- ----------------------------------- ---------- -------- -------
1001 AAA JOE A BLOGS AA AA 0000
1002 BBB Michael J Jackson BB BB 0000
1003 AAA Lewis Hamilton AA AA 0000
输出:
Import-Module ./tools/powershell/DhcpServer.psd1
答案 2 :(得分:0)
使用子串/ charindex为您提供更多选项。
最好转换为XML,但代码会更多。
Create Table #table (record VARCHAR(50))
Insert Into #table
VALUES ('1001-AAA-JOE A BLOGS-AAAA0000'), ('1002-BBB-Michael J Jackson-BBBB0000'), ('1003-AAA-Lewis Hamilton-AAAA0000')
Select
SUBSTRING(SUBSTRING(record, CHARINDEX('-', record) + 5, 100) , 1, CHARINDEX('-', SUBSTRING(record, CHARINDEX('-', record) + 5, 100))-1) 'Name'
From #table
或
Select
SUBSTRING(x, 1, CHARINDEX('-', x) -1) 'Name'
From
(
Select
SUBSTRING(record, CHARINDEX('-', record) + 5, 100) 'x'
From #table
) y
答案 3 :(得分:0)
我尝试使用适用于Windows的ODBC数据管理工具odbcad32
创建自定义CSV格式。
文件location.asc
如下所示:
1001-AAA-JOE A BLOGS-AAAA0000
1002-BBB-Michael J Jackson-BBBB0000
1003-AAA-Lewis Hamilton-AAAA0000
在odbcad32
中,我添加了一个类型为“Microsoft Access Text Driver”的新数据源。配置它,我为location.asc
指定了数据目录。然后我点击了[选项>>]按钮。在出现的窗口中,我添加了一个新的扩展名* .hsv。然后,我点击[Define Format ...]按钮。标记为location.asc
后,我将下拉列表中的格式从CSV分隔更改为自定义分隔。我将分隔符指定为-
,连字符。我没有检查[]列名称标题复选框。然后,我点击右侧的[Guess]按钮,自动获得F1到F4的字段。然后,我点击了3次[Ok],完全退出ODBCAD32。
有了这个,我可以连接到新的ODBC数据源。然后:
SQL>select * from location.asc;
F1 |F2 |F3 |F4
1,001|AAA|JOE A BLOGS |AAAA0000
1,002|BBB|Michael J Jackson|BBBB0000
1,003|AAA|Lewis Hamilton |AAAA0000
这可能是你的解决方案吗?