oracle - 从用分隔符逗号分隔的 csv 文件中的记录中选择一个用双引号括起来的字符串
问题描述
我有一个带有以下示例行的 CSV 文件。每个字段由,
分隔符分隔。但是你可以看到双引号里面有一个逗号。
如何获取,
用双引号括起来的分隔字符串?它不应被视为分隔符。
请在 Oracle PL/SQL 语言代码方面提供帮助。
12791750024,"ROSETTE","ROLLIN","6,RUE DE MALLEVILLE","95880ENGHIEN LES BAINS",35000,53.4400000000000000000000
解决方案
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>
干得好; 一切都在它的位置。
推荐阅读
- mongodb - 查找数组中包含字符串的文档
- ruby-on-rails - 公寓:TenantNotFound - 以下架构之一无效
- sybase - Sybase 15.7:在大表中聚合数据
- ios - iPad 模拟器上的 SKScene 问题无法在 Xcode 11 beta 7 中填满屏幕
- css - 打印,将内容分成页面和引导
- python-3.x - 使用日期过滤器从 Mongo 过滤数据
- dynamics-crm - 是否可以在 CRM Dynamics 365 CE 的“所有解决方案”视图中添加按钮?
- hibernate - org.hibernate.engine.jdbc.spi.SqlExceptionHelper - 无效的参数索引 2
- flutter - 当 snapshot.data 未来没有数据时颤振完美消息
- python - 从抽象方法继承包装器