免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2887 | 回复: 8
打印 上一主题 下一主题

[文本处理] 连接mysql返回带空格的字符串 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-01-15 11:55 |只看该作者 |倒序浏览
大神们好!小白又来问问题
这两天写脚本,连接数据库之后,读取一张表格里面两个字段的值,字段都是字符串类型;
里面存储的值带空格
如果是返回一个数组则数组以空格分界,又没办法让mysql返回的时候在同个字符串带上个双引号
所以提取两个带空格的串,就做了两次查询
应该如何改进
请大神教我更高效的方法!小白谢过

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
2 [报告]
发表于 2015-01-15 12:38 |只看该作者
完整代码发出来看看

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
3 [报告]
发表于 2015-01-15 13:26 |只看该作者
猜猜猜 :wink:

论坛徽章:
0
4 [报告]
发表于 2015-01-15 14:22 |只看该作者
本帖最后由 rdcwayx 于 2015-01-15 17:27 编辑

回复 2# Shell_HAT


    你好:
例如 我的表格现在是:
  1. mysql> select * from Mail;
  2. +---------+----------------+
  3. | subject | summary        |
  4. +---------+----------------+
  5. | a test  | this is a test |
  6. +---------+----------------+
  7. 1 row in set (0.00 sec)
复制代码
需要返回  subject 和 summary
  1. #!/bin/bash
  2. mail=(`mysql -s <<end
  3. use test;
  4. select * from Mail;
  5. end`)
  6. echo "${mail[0]};"
  7. echo "${mail[1]};"
  8. echo "${mail[*]};"
复制代码
如果这样子  mail[0] 就是 “a” mail[1] 就是“test”
如何处理能够 在一次查询中,把  “a test”赋值给mail[0]  "this is a test"赋给mai[1]?

论坛徽章:
0
5 [报告]
发表于 2015-01-15 14:24 |只看该作者
回复 3# reyleon

大神赐教呀
   

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
6 [报告]
发表于 2015-01-15 14:35 |只看该作者
回复 5# 花哥爱吉他





    mysql 有一个 -e 的选项呐


values=$(mysql -p$passwd -u$user $db_name -BN -e "select * from Mail")
eval mail=($(awk -F '\t' '{print "\047"$1"\047", "\047"$2"\047"}' <<< "$values"))
echo ${mail[0]}
echo ${mail[1]}

论坛徽章:
2
摩羯座
日期:2014-11-03 15:28:56卯兔
日期:2015-01-04 17:20:51
7 [报告]
发表于 2015-01-15 14:36 |只看该作者
回复 4# 花哥爱吉他


    不懂mysql,不过按sql规范来说,在select的时候,用比如竖线之类符号来拼接select中的字段至一个字符串
   
   取出来以后,再用shell根据竖线解析出各个字段来呢。。。

论坛徽章:
0
8 [报告]
发表于 2015-01-15 15:15 |只看该作者
回复 6# reyleon


    谢谢六子
你的方式试了下 可以用 但是其中有不懂的地方:
使用 -F “\t” 作为分割符 分割“$1” "$2"  , “$values”作为输入
是不是在 select 的时候  不同字段的值之间  就已经插入了 \t 所以才能使用\t来分割两个字段
如果我在插入数据的时候:
mysql> insert into Mail(subject,summary) values("a\ttest","this\tis\ta\ttest";
Query OK, 1 row affected (0.25 sec)

mysql> select * from Mail;
+--------+----------------+
| a        test | this        is        a        test |
+--------+----------------+
1 row in set (0.00 sec)

运行结果:
a\ttest
this\tis\ta\ttest

为什么用你的方法,还是可以区分开不同字段,而同一个字段中“\t” 不做为分割的标志?

论坛徽章:
0
9 [报告]
发表于 2015-01-15 15:19 |只看该作者
回复 7# bulletmarquis


    你好,你的方法
在两个字段之间加“|” 使用cut命令分割
#!/bin/bash
mail=(`mysql -s <<end
use test;
select subject,"|",summary from Mail;
end`)
echo "${mail[0]};"
echo "${mail[1]};"
echo "${mail
  • }"|cut -d "|" -f 2

    运行结果:
    a;
    test;
    this is a test

    这样做确实能够把第一个和第二个字段分割开;
    缺点: 如果字符串中有“|” 符号 那么就可能产生错误

    例如数据输入:
    mysql> insert into Mail(subject,summary) values("a|test","this|is|a|test";
    Query OK, 1 row affected (0.26 sec)

    上面数据执行结果:
    a|test;
    |;
    test
  • 您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

    北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
    未成年举报专区
    中国互联网协会会员  联系我们:huangweiwei@itpub.net
    感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP