首页 > 解决方案 > 从用分隔符逗号分隔的 csv 文件中的记录中选择一个用双引号括起来的字符串

问题描述

我有一个带有以下示例行的 CSV 文件。每个字段由,分隔符分隔。但是你可以看到双引号里面有一个逗号。

如何获取,用双引号括起来的分隔字符串?它不应被视为分隔符。

请在 Oracle PL/SQL 语言代码方面提供帮助。

12791750024,"ROSETTE","ROLLIN","6,RUE DE MALLEVILLE","95880ENGHIEN LES BAINS",35000,53.4400000000000000000000

标签: oracleplsql

解决方案


PL/SQL?读取 CSV 文件?如果可以的话,我会建议另一个选项 - SQL*Loader。它提供了两个选项来解决您的问题;这些是

fields terminated by ',' 
optionally enclosed by '"'

我创建了测试表,它应该接受您在 CSV 文件中的数据:

SQL> desc dq;
 Name                    Null?    Type
 ----------------------- -------- ----------------
 ID                               NUMBER
 NAME_1                           VARCHAR2(10)
 NAME_2                           VARCHAR2(10)
 ADDR1                            VARCHAR2(25)
 ADDR2                            VARCHAR2(25)
 NUM1                             NUMBER
 NUM2                             NUMBER

SQL>

控制文件(如infile,您将使用 CSV 文件的路径,例如infile 'c:\temp\myfile.csv')。为简单起见,我将示例数据包含在begindata部分中。

load data 
infile *
replace
into table dq
fields terminated by ',' 
optionally enclosed by '"' 
trailing nullcols
( 
id,
name_1,
name_2,
addr1,
addr2,
num1,
num2 decimal external "replace(:num2, '.', ',')"
)

begindata
12791750024,"ROSETTE","ROLLIN","6,RUE DE MALLEVILLE","95880ENGHIEN LES BAINS",35000,53.4400000000000000000000

加载会话:

c:\Temp>sqlldr scott/tiger control=test17.ctl log=test17.log

SQL*Loader: Release 11.2.0.2.0 - Production on Sri Tra 8 09:03:01 2020

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Commit point reached - logical record count 1

c:\Temp>

结果:

SQL> select * From dq;

          ID NAME_1     NAME_2     ADDR1                     ADDR2                           NUM1       NUM2
------------ ---------- ---------- ------------------------- ------------------------- ---------- ----------
 12791750024 ROSETTE    ROLLIN     6,RUE DE MALLEVILLE       95880ENGHIEN LES BAINS         35000      53,44

SQL>

干得好; 一切都在它的位置。


推荐阅读