首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >组合mysql表中没有额外空格的字符串

组合mysql表中没有额外空格的字符串
EN

Stack Overflow用户
提问于 2015-05-20 20:12:52
回答 1查看 70关注 0票数 0

我一直在开发django应用程序。我们从加利福尼亚州立机构中提取了一大组表格,对数据进行处理并重新发布。我一直在尝试做一些简单的事情,但是简单的实现真的很慢,我可能会把自己想成一个洞。这是其中一张桌子的一点。有很多这样的桌子。

代码语言:javascript
复制
mysql> desc EXPN_CD;
+------------+---------------+------+-----+---------+-------+
| Field      | Type          | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| AGENT_NAMF | varchar(45)   | NO   |     | NULL    |       |
| AGENT_NAML | varchar(200)  | NO   |     | NULL    |       |
| AGENT_NAMS | varchar(10)   | NO   |     | NULL    |       |
| AGENT_NAMT | varchar(10)   | NO   |     | NULL    |       |
| AMEND_ID   | int(11)       | NO   | MUL | NULL    |       |
| AMOUNT     | decimal(14,2) | NO   |     | NULL    |       |
| BAKREF_TID | varchar(20)   | NO   |     | NULL    |       |
| BAL_JURIS  | varchar(40)   | NO   |     | NULL    |       |
| BAL_NAME   | varchar(200)  | NO   |     | NULL    |       |
| BAL_NUM    | varchar(7)    | NO   |     | NULL    |       |
| CAND_NAMF  | varchar(45)   | NO   |     | NULL    |       |
| CAND_NAML  | varchar(200)  | NO   |     | NULL    |       |
| CAND_NAMS  | varchar(10)   | NO   |     | NULL    |       |
| CAND_NAMT  | varchar(10)   | NO   |     | NULL    |       |
| CMTE_ID    | varchar(9)    | NO   |     | NULL    |       |
| CUM_OTH    | decimal(14,2) | YES  |     | NULL    |       |
| CUM_YTD    | decimal(14,2) | YES  |     | NULL    |       |
| DIST_NO    | varchar(3)    | NO   |     | NULL    |       |
| ENTITY_CD  | varchar(3)    | NO   |     | NULL    |       |
| EXPN_CHKNO | varchar(20)   | NO   |     | NULL    |       |
| EXPN_CODE  | varchar(3)    | NO   |     | NULL    |       |
| EXPN_DATE  | date          | YES  |     | NULL    |       |
| EXPN_DSCR  | varchar(400)  | NO   |     | NULL    |       |
| FILING_ID  | int(11)       | NO   | MUL | NULL    |       |
...

我正在看所有这些桌子。我取出每个名字,"CAND“(候选人),"AGENT”等等,并将每一个引用放入一行:

代码语言:javascript
复制
mysql> desc calaccess_campaign_browser_name;
+-------------+---------------+------+-----+---------+----------------+
| Field       | Type          | Null | Key | Default | Extra          |
+-------------+---------------+------+-----+---------+----------------+
| id          | int(11)       | NO   | PRI | NULL    | auto_increment |
| ext_pk      | int(11)       | NO   | MUL | NULL    |                |
| ext_table   | varchar(255)  | NO   |     | NULL    |                |
| ext_prefix  | varchar(255)  | NO   |     | NULL    |                |
| naml        | varchar(255)  | YES  |     | NULL    |                |
| namf        | varchar(255)  | YES  |     | NULL    |                |
| nams        | varchar(255)  | YES  |     | NULL    |                |
| namt        | varchar(255)  | YES  |     | NULL    |                |
| name        | varchar(1023) | YES  |     | NULL    |                |
+-------------+---------------+------+-----+---------+----------------+

这些值从来都不是空值,但很多(有时是绝大多数)都是空字符串。

我正在建立名字列。最明显的方法是:

(namt,‘',namf,’',naml,‘',nams)

但是当其中的2或3是空白的时候,这就给了我大量的双空格和空格填充在字符串的开头或结尾。

我做过的事:

1)使用python查找并删除额外的空格。如果我有一个月左右的时间让它运行的话,这是可行的。

2)将上述名称放在一起,并使用SQL查找和替换额外的空格。再说一次,需要很长时间。

其中一个问题是,python的MySQL库有一个游标,特别是用于处理大型结果集的游标。对于大型查询操作,没有类似之处。或者我看错了。

代码语言:javascript
复制
% pip freeze
...
MySQL-python==1.2.5c
...

3)将名称提取到一个由选项卡分隔的文本文件中,并在其中进行修复,然后将该文件加载到新表中。布莱。很多愚蠢的脚本。用sed还是awk?什么?

4)我可以在15个不同的查询中执行concat()操作,并为每个查询执行适当的concat操作,以便在名称中没有额外的空格。我有:

  1. namt = null和namf = null和naml = null和nams != null (案例0001)
  2. namt = null和namf = null和naml != null和nams = null (案例0010)
  3. namt = null和namf = null和naml != null和nams != null (案例0011)
  4. 等等

实际上这就是我要去的地方。跑不了一天。哇哦!

但是,出于其他原因,我也在做类似的事情,我是如何多次想要编写这样的代码的呢?利克!

一定有一种更聪明的方法来做这件事,而我并没有看到。我在大约20多个表中这样做,每个表中有2-5个名称,有时大约有15,000行,有时有20,000,000行。大多数表在300 000至750 000之间。天哪,我累了吗.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-20 20:16:56

在MySQL中,我认为你在寻找concat_ws()

代码语言:javascript
复制
concat_ws(' ', nullif(namt, ''), nullif(namf, ''), nullif(naml, ''), nullif(nams, ''))

如果值为空,则nullif()将该值转换为NULLconcat_ws()忽略NULL值,因此不会得到重复的空格。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30359495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档