使用sqlite3如何设置SQL db(或其CSV)中一列的宽度
对此感到绝望: 我尝试将SQL表中一个特定列的宽度限制为7个字符宽。更准确地说,我希望将列中的每个元素修剪为宽度最多为7个字符的文本元素(如果更长,则应将其截断) 另一种可能是在创建SQL db之前更改相应CSV列中的字符数 问题是:数据库太大了 (因此,使用最常用的工具(如Sublime、Atom或Excel)无法更改CSV(在创建SQL-DB之前) 还有什么替代方案?(可能是sqlite3或某些终端命令??) 我的CSV文件(使用sqlite3如何设置SQL db(或其CSV)中一列的宽度,sql,database,csv,width,Sql,Database,Csv,Width,对此感到绝望: 我尝试将SQL表中一个特定列的宽度限制为7个字符宽。更准确地说,我希望将列中的每个元素修剪为宽度最多为7个字符的文本元素(如果更长,则应将其截断) 另一种可能是在创建SQL db之前更改相应CSV列中的字符数 问题是:数据库太大了 (因此,使用最常用的工具(如Sublime、Atom或Excel)无法更改CSV(在创建SQL-DB之前) 还有什么替代方案?(可能是sqlite3或某些终端命令??) 我的CSV文件(table1.txt)如下所示: some_text,some_i
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 terminal cmd创建数据库:
sqlite3 myTable.db > creationFile.sql`
现在,CSV文件中已经引入了列宽限制。但我认为这是不可能的,因为由于CSV文件的大尺寸(超过10百万行),没有标准编辑器再这样做了。sqlite3有没有办法在数据库创建过程中处理这个问题?或者在DB创建之前、期间或之后执行此操作的任何终端cmd???可能不是最有效的方法,但由于我不知道该工具,我只能看到:
text
,应该适用于任何文本长度stop\u name\u text
的文本:
UPDATE table1
SET stop_name_text = substr(stop_name_text, 1, 7);
但是要小心,当你想对某些文本
执行此操作时:你将其声明为主键
。缩短可能会导致在不同的列中出现两个相同的文本。例如,如果你有“Hello World”和“Hello Walter”,这两个词都会导致“Hello W”。但是声明的主键
列的值必须是唯一的,因此在这种情况下,更新
将失败
或者,这可能是一个错误,您实际上想将某个id
声明为主键
?顾名思义也许不是最有效的方法,但由于我不知道工具,我只能看到:
text
,应该适用于任何文本长度stop\u name\u text
的文本:
UPDATE table1
SET stop_name_text = substr(stop_name_text, 1, 7);
但是要小心,当你想对某些文本
执行此操作时:你将其声明为主键
。缩短可能会导致在不同的列中出现两个相同的文本。例如,如果你有“Hello World”和“Hello Walter”,这两个词都会导致“Hello W”。但是声明的主键
列的值必须是唯一的,因此在这种情况下,更新
将失败
或者,这可能是一个错误,您实际上想将某个id
声明为主键
?顾名思义你可以试试这个。创建表1后运行以下语句:
CREATE TABLE table2 AS
SELECT some_text, SUBSTR(some_id, 1, 7) as some_id, stop_name
FROM table1;
注意:不确定SUBSTR()函数的语法。最好用谷歌搜索一下。你可以试试这个。创建表1后运行以下语句:
CREATE TABLE table2 AS
SELECT some_text, SUBSTR(some_id, 1, 7) as some_id, stop_name
FROM table1;
注意:不确定SUBSTR()函数的语法。最好用谷歌搜索它。
左(,7)
或同等工具。这取决于您使用的DBMS(哪个是?),谢谢。我正在使用SQLite的DB浏览器(Mac OS)。我从CSV文件中创建了带有sqlite3 terminal cmd的DB,考虑编辑您的问题并添加适当的sqlite标记。对于SQLite,等价物是substr(,1,7)
。在将值插入表之前,需要将其应用于这些值。我不能确切地告诉你你是如何做到这一点的,因为我不知道你在那里使用的程序。但是,也许你自己能弄明白,这仅仅是一个提示,无论如何都是有价值的。我添加了更多关于DB创建过程的信息。请您更详细地告诉我如何以及在何处添加您的substr(,1,7)
确切地说???left(,7)
或同等内容。这取决于您使用的DBMS(哪个是?),谢谢。我正在使用SQLite的DB浏览器(Mac OS)。我从CSV文件中创建了带有sqlite3 terminal cmd的DB,考虑编辑您的问题并添加适当的sqlite标记。对于SQLite,等价物是substr(,1,7)
。在将值插入表之前,需要将其应用于这些值。我不能确切地告诉你你是如何做到这一点的,因为我不知道你在那里使用的程序。但是,也许你自己能弄明白,这仅仅是一个提示,无论如何都是有价值的。我添加了更多关于DB创建过程的信息。您能详细告诉我如何以及在哪里添加您的substr(,1,7)
吗?谢谢您的帮助。我的最终解决方案与maxim的解决方案一致——不是因为他的解决方案比你的好很多,而是因为你提到的主键的原因!!谢谢你的帮助。我的最终解决方案与maxim的解决方案一致——不是因为他的解决方案比你的好很多,而是因为你提到的主键的原因!!