内容简介:场景:临近年底,各个App都会有个人年度账单,项目里为了图快,以及节省各个系统模块之间的接口联调。直接人工统计数据(:flushed::flushed::flushed::flushed::flushed::flushed::flushed::flushed::flushed::flushed::flushed::flushed::flushed::flushed:),构造账单数据JSON。话不多说,老夫拿起键盘就是干。五毒有欧,数据俺不九班的由其他各个系统小组提供,但是有些数据是随机生成的一些描述性的文本
场景:临近年底,各个App都会有个人年度账单,项目里为了图快,以及节省各个系统模块之间的接口联调。直接人工统计数据(:flushed::flushed::flushed::flushed::flushed::flushed::flushed::flushed::flushed::flushed::flushed::flushed::flushed::flushed:),构造账单数据JSON。
话不多说,老夫拿起键盘就是干。
五毒有欧,数据俺不九班的由其他各个系统小组提供,但是有些数据是随机生成的一些描述性的文本,而该文本从固定的文本数组而来。前端展示效果又要将随机文本拆成几个部分来。
正常的 sql 拼接成json还方便。
CONCAT('\"app\":{\"time\":\"', DATE_FORMAT(time, "%Y-%m-%d %T"), '\",\"days\":', days, case when typeTime is null then '' else CONCAT(',\"typeTime\":\"', DATE_FORMAT(typeTime, "%Y-%m-%d %T"), '\"') end,'}') 复制代码
随机文本来了
学富五车:再美的气质,也掩盖不了你才华本质 足智多谋:脑力使用积极分子,非你莫属 仗义执言:你的见解,面面俱到,深入人心 火眼金睛:独特的洞察力,总能获悉一切 见多识广:最美的阅历,就是沿路的风景 责任担当:先天下之忧而忧,后天下之乐而乐
从上面可以看的出,它们之间一一对应的。
唯独那些随机文本着实思考片刻。来,我们层层剖析它。
截取文本
mysql中怎么从数组中取随机的文本,参考substring_index函数。分为两步走,第一步先去倒数开始往前数倒数几位,第二步再从新的数组中取第一位。
substring_index(substring_index(array, '符合间隔', -n), '符合间隔', 1) 复制代码
构造随机因子
现在再看看这个随机因子怎么取,参考rand()函数。
因为取的是-1到-7之间的随机数。所以最终的效果就是如下。
-floor(rand()*7+1) 复制代码
取随机范围内的值可以参考这个公式
FLOOR(start_num + RAND() * (end_num - start_num + 1)) 复制代码
开始第一次截取
随机串截取方法有了,随机数也有了,开干。
select user_id, CONCAT('\"desc\": {\"label\":\"', substring_index(substring_index('学富五车;足智多谋;仗义执言;火眼金睛;见多识广;责任担当;乐观积极',';',-FLOOR(rand()*7+1)),';',1),'\"', ',\"description\": \"', substring_index(substring_index('再美的气质,也掩盖不了你才华本质;脑力使用积极分子,非你莫属;你的见解,面面俱到,深入人心;独特的洞察力,总能获悉一切;最美的阅历,就是沿路的风景;先天下之忧而忧,后天下之乐而乐;爱笑的你运气一定不会差',';',-FLOOR(rand()*7+1)),';',1), '\"}' ) as report_content from data; 复制代码
结果发现对不上啊,【责任担当】应该对应【先天下之忧而忧,后天下之乐而乐】,而结果出现部分对应到【再美的气质,也掩盖不了你才华本质】
努力第二次截取
这次考虑到上回我们是把随机因子放在sql里没句话里,所以每次都执行了2次,生成是随机因子就不一样了,截取的结果就对应不上,那,我们先在子查询里先把随机因子生成后,再在外层用这个随机因子这下应该不一样了把。
select temp.user_id, CONCAT('\"desc\": {\"label\":\"', substring_index(substring_index('学富五车;足智多谋;仗义执言;火眼金睛;见多识广;责任担当;乐观积极',';',temp.desc_index),';',1),'\"', ',\"description\": \"', substring_index(substring_index('再美的气质,也掩盖不了你才华本质;脑力使用积极分子,非你莫属;你的见解,面面俱到,深入人心;独特的洞察力,总能获悉一切;最美的阅历,就是沿路的风景;先天下之忧而忧,后天下之乐而乐;爱笑的你运气一定不会差',';',temp.desc_index),';',1), '\"}' ) as report_content from (select user_id, -FLOOR(rand()*7+1) as desc_index from data) temp 复制代码
吐血的图片在查找中,从开头看就看的出来,对应不上啦,前几个就前部对应【爱笑的你运气一定不会差】,爱笑的我,运气就是这么差。
改变下语句把随机因子打印出来
select temp.user_id, desc_index, CONCAT(desc_index, '\"desc\": {\"label\":\"', substring_index(substring_index('学富五车;足智多谋;仗义执言;火眼金睛;见多识广;责任担当;乐观积极',';',temp.desc_index),';',1),'\"', ',\"description\": \"', substring_index(substring_index('再美的气质,也掩盖不了你才华本质;脑力使用积极分子,非你莫属;你的见解,面面俱到,深入人心;独特的洞察力,总能获悉一切;最美的阅历,就是沿路的风景;先天下之忧而忧,后天下之乐而乐;爱笑的你运气一定不会差',';',temp.desc_index),';',1), '\"}' ) as report_content from (select user_id, -FLOOR(rand()*7+1) as desc_index from data) temp 复制代码
********,前面这些打星号的,都是脏话,忽略它,随机因子,明明在子查询都生成了,为毛还是不一样。
最终绞尽脑汁的截取
本想在子查询中使用rand()把随机因子可以搞出来,哪成想,在外层的查询时rand()又TMM的重算了一遍。
一顿参考一顿找资料,偶然间发现了问题所在
2017年有个哥们提了这样的一个issue,就是上面的链接。
里面说了一些情况,在 mysql 5.6里,随机数是一样的,5.7里随机数不一样。如果子查询里不使用表,随机数也是一样。刚刚好mysql就是5.7,刚刚好中招了。
根据作者和Roy Lyseng的建议,我用limit,没想到,尽然阔以啦,老泪纵横啊。
还是老外好,成功的解决方案,也会在issue里说明下的。
改造后的最终样子。
select temp.user_id, desc_index, CONCAT(desc_index, '\"desc\": {\"label\":\"', substring_index(substring_index('学富五车;足智多谋;仗义执言;火眼金睛;见多识广;责任担当;乐观积极',';',temp.desc_index),';',1),'\"', ',\"description\": \"', substring_index(substring_index('再美的气质,也掩盖不了你才华本质;脑力使用积极分子,非你莫属;你的见解,面面俱到,深入人心;独特的洞察力,总能获悉一切;最美的阅历,就是沿路的风景;先天下之忧而忧,后天下之乐而乐;爱笑的你运气一定不会差',';',temp.desc_index),';',1), '\"}' ) as report_content from (select user_id, -FLOOR(rand()*7+1) as desc_index from data limit 100000) temp 复制代码
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Apache Pig字符串截取实战小例子
- Apache Pig字符串截取实战小例子
- Apache Pig字符串截取实战小例子
- 用css截取字符的几种方法详解(css排版隐藏溢出文本)
- Android布局截取
- 前端字体截取:实战篇
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Types and Programming Languages
Benjamin C. Pierce / The MIT Press / 2002-2-1 / USD 95.00
A type system is a syntactic method for automatically checking the absence of certain erroneous behaviors by classifying program phrases according to the kinds of values they compute. The study of typ......一起来看看 《Types and Programming Languages》 这本书的介绍吧!