【发布时间】:2023-03-20 17:11:01
【问题描述】:
对此感到绝望:
我尝试将 SQL 表中一个特定列的宽度限制为 7 个字符宽。更准确地说,我想将列中的每个元素修剪为宽度最多为 7 个字符的文本元素(如果更长,则应将其截断)。
另一种可能性是在创建 SQL-db 之前更改相应 CSV 列中的字符数。
问题:数据库很大!!
(因此,使用 Sublime、Atom 或 Excel 等大多数常用工具无法更改 CSV(在创建 SQL-DB 之前))
有什么选择? (可能是 sqlite3 或一些终端 cmd ??)
我的 CSV 文件 (table1.txt) 看起来像:
some_text,some_id,stop_name
"Hello World1","1101069:0:1","MyName1"
"Hello World2","1333332","MyName2"
"Hello World3","1452339:0","MyName3"
"Hello World4","8334342:2:0","MyName4"
some_id 列应限制为 7 个字符,导致...
some_text,some_id,stop_name
"Hello World1","1101069","MyName1"
"Hello World2","1333332","MyName2"
"Hello World3","1452339","MyName3"
"Hello World4","8334342","MyName4"
我的 sqlite3 创建文件 (creationFile.sql) 看起来像这样:
CREATE TABLE table1 (some_text TEXT PRIMARY KEY, some_id TEXT, stop_name TEXT) WITHOUT ROWID;
.separator ,
.import table1.txt table1
我使用以下 sqlite3 终端 cmd 来创建数据库:
sqlite3 myTable.db > creationFile.sql`
现在,CSV 文件中可能已经引入了列宽限制。但我认为这是相当不可能的,因为由于 CSV 文件的大小(> 10 Mio 行),没有标准编辑器不再这样做。 sqlite3 有没有办法在创建数据库时处理这个问题?或者任何终端 cmd 在创建数据库之前、期间或之后这样做?
【问题讨论】:
-
left(<your string>, 7)或同等学历。这取决于您正在使用的 DBMS(是什么?)。 -
谢谢。我正在使用 DB-Browser for SQLite (Mac OS)。我使用 CSV 文件中的 sqlite3 终端 cmd 创建数据库
-
考虑编辑您的问题并添加适当的 sqlite 标签。对于 SQLite,等效值为
substr(<your string>, 1, 7)。在将它们插入表之前,您需要将其应用于这些值。我不能告诉你你是怎么做到的,因为我不知道你在那里使用的程序。但也许你可以自己解决这个问题,而且这个提示还是很有价值的。 -
我添加了更多关于数据库创建过程的信息。您能否详细告诉我,我将如何以及在何处添加您的
substr(<your string>, 1, 7)??