AI工具推荐

【【建议收藏】5个强到离谱的AI网站,总有一个你用得到!】 https://www.bilibili.com/video/BV1nX4y167gW/?share_source=copy_web&vd_source=7e55412f360a6ef7a503c2cdb428a5c2

这个视频给大家带来了5个超强AI网站,总有一个你用的到,建议收藏哦!

AI PPT生成:(1) gamma.app (2) design.meitu.com/ppt/?theme=dark (3) mindshow.fun 人声分离:lalal.ai 图像处理/视频处理:booltool.boolv.tech/home AI图像生成:rightbrain.art AI英文写作辅助:writingo.net收起

收到一个AI集合工具:https://ai.baiwen.net/

Mysql处理时间及字符串

1、mysql查询条件自动去除左边的0

处理办法:字符串+0,可以自动转换

2、计算时间差

SELECT DATEDIFF(‘2008-8-21,’2009-3-21’); 跟SqlServer 差不多

3、 在Mysql 数据库中存在两种字符串连接操作.具体操作如下 :

CONCAT(string1,string2,…) 说明 : string1,string2代表字符串,concat函数在连接字符串的时候,只要其中一个是NULL,那么将返回NULL 例1: 例2:

CONCAT_WS(separator,str1,str2,…) 说明 : string1,string2代表字符串,concat_ws 代表 concat with separator,第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。 举例1: mysql> select concat_ws(‘#’,’courseName=’,’NX’,null) AS nx_courseName;

MySQL中group_concat函数
完整的语法如下:
group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator ‘分隔符’])

基本查询

mysql> select * from stu1;
+——+——+
| id| name |
+——+——+
|1 | 10|
|1 | 20|
|1 | 20|
|2 | 20|
|3 | 200 |
|3 | 500 |
+——+——+
6 rows in set (0.00 sec)

以id分组,把name字段的值打印在一行,逗号分隔(默认)

mysql> select id,group_concat(name) from aa group by id;
+——+——————–+
| id| group_concat(name) |
+——+——————–+
|1 | 10,20,20|
|2 | 20 |
|3 | 200,500|
+——+——————–+
3 rows in set (0.00 sec)

以id分组,把name字段的值打印在一行,分号分隔

mysql> select id,group_concat(name separator ‘;’) from aa group by id;
+——+———————————-+
| id| group_concat(name separator ‘;’) |
+——+———————————-+
|1 | 10;20;20 |
|2 | 20|
|3 | 200;500 |
+——+———————————-+
3 rows in set (0.00 sec)

以id分组,把去冗余的name字段的值打印在一行,

逗号分隔

mysql> select id,group_concat(distinct name) from aa group by id;
+——+—————————–+
| id| group_concat(distinct name) |
+——+—————————–+
|1 | 10,20|
|2 | 20 |
|3 | 200,500 |
+——+—————————–+
3 rows in set (0.00 sec)

以id分组,把name字段的值打印在一行,逗号分隔,以name排倒序

mysql> select id,group_concat(name order by name desc) from aa group by id;
+——+—————————————+
| id| group_concat(name order by name desc) |
+——+—————————————+
|1 | 20,20,10 |
|2 | 20|
|3 | 500,200|
+——+—————————————+
3 rows in set (0.00 sec)

还有一个简单的连接方式为: ||

mysql> select * from student;
+—-+——+——-+———-+————+
| id | age | score | name | birth |
+—-+——+——-+———-+————+
| 1 | 23 | 78 | 李四 | 2017-10-10 |
| 2 | 24 | 78 | zhangsan | 2017-10-10 |
| 3 | 25 | 99 | 王五 | 2016-05-17 |
+—-+——+——-+———-+————+
3 rows in set (0.00 sec)

mysql> select id+999,name,name+99,name+’999′ from student;
+——–+———-+———+————+
| id+999 | name | name+99 | name+’999′ |
+——–+———-+———+————+
| 1000 | 李四 | 99 | 999 |
| 1001 | zhangsan | 99 | 999 |
| 1002 | 王五 | 99 | 999 |
+——–+———-+———+————+
3 rows in set, 6 warnings (0.00 sec)

css打印分页

一、打印方法:

一般打印web使用的是window.print()方法,当然也可使用vue-print

二、参数介绍:

@page中一般设置打印的页头页脚打印方向等,示例:

size:打印信息,打印纸张类型(A4)亦或控制打印方向,portrait: 纵向打印地, landscape: 横向。

@page{

margin: 4mm 14mm 4mm 4mm;

size:A4 landscape;

}

@media print 设置css中可以查看打印样式,示例:

media print {

}

可以将打印和页面的部分分离,需要注意的是需要打印的部分用“包含css样式再赋予函数,注意不是引号。然后抛出引入展示页面中,放在data的return {}下就行了。

三、分页:

分页的话使用的css样式一般是page-break-before与page-break-after这两个,对应的是打印前分页与打印后分页。

page-break-before 在元素前分页

page-break-after 在元素后分页

page-break-inside 元素内部分页

打印属性可以控制分页方向,可以设定4种设定值:auto、always、left和right。其中Auto是默认值,只有在有需要时,才需设定分页符号,以page-break-after示例:

page-break-after:auto; 默认值

page-break-after:always; 新分页在元素下方

page-break-after:left; 新分页在元素下方

page-break-after:right; 新分页在元素下方

注意:

1.分页的元素必须是个可展示的块级元素,为求保险最好加上display: block;

2.元素内分页我试过,不怎么管用,所有还是用page-break-after比较好,要循环中分页的建议加个判断,然后再设置分页,再添加新的table元素,在该table元素中复制这个循环同样加上判断展示分页后的内容

3.建议分页元素放在两个table元素之间,分页后的table元素设置margin-top,如果不起左右就在元素属性style上设置
————————————————
版权声明:本文为CSDN博主「qq_35491739」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_35491739/article/details/126279510

mysql计算正态分布、差异系数、离均差、离均差率

1、数据准备  建表 

drop table if exists score;
create table score(
    id int not null primary key auto_increment,
    score decimal(10,2) not null
);

  插入数据

insert into score (score) values (89.4);
insert into score (score) values (82.5);
insert into score (score) values (65);
insert into score (score) values (98);
insert into score (score) values (92);
insert into score (score) values (34);
insert into score (score) values (59);
insert into score (score) values (83);
insert into score (score) values (88);
insert into score (score) values (63);
insert into score (score) values (100);
insert into score (score) values (96);
insert into score (score) values (68);
insert into score (score) values (56);

注意:计算标准差最少需要两个值

2、计算正态分布

计算方法是:平均分-标准差(四个值:μ-2σ,μ-σ,μ+σ,μ+2σ)

select round(score_avg - score_bzc * 2, 2) zt1,
       round(score_avg - score_bzc, 2)     zt2,
       round(score_avg + score_bzc, 2)     zt3,
       round(score_avg + score_bzc * 2, 2) zt4
from (select avg(score) score_avg, stddev_samp(score) score_bzc
      from score
      where id in (1, 2)) as a;

3、计算差异系数

 计算方法是:标准差/平均分(σ/μ)

select round(score_bzc/score_avg,2) cyxs
from (select avg(score) score_avg, stddev_samp(score) score_bzc
      from score
      where id in (1,2)) as a;

4、计算离均差

计算方法是:单个值-平均值(x-μ)

select round(score - (avg(score) over ()), 2) ljc
from score
where id in (1, 2);

5、计算离均差率

计算方法是:离均差/平均值((x-μ)/μ)

select round((score - (avg(score) over ())) / (avg(score) over ()), 2) ljcl
from score
where id in (1, 2);

正则提取要选择题的选项

如下题匹配选项:

(1) 设集合 $A=[-1,2], B=\left{y \mid y=x^{2}, x \in A\right}$, 则 $A\cap B=$
A. $[1,4]$
B. $[1,2]$
C. $[-1,0]$
D. $[0,2]$

直接上代码:

    function getOption(str,from,to)
    {
        var r = 'var reg = /[\(]*'+from+'[:|:|、|.]{1}(.*?)[\s]?'+ to +'/';
        // console.log(r);
        eval(r);
        var arr = str.match(reg);
        console.log(arr);
        return arr[1].replace('<br/>','').replace('</p><p style=\"white-space: normal;\">','');
        //return str.match(reg)[1];
    }

格式化数据:

    function formatContent(content)
    {
        content = content.replace('\(A\)','A.').replace('\(B\)','B.').replace('\(C\)','C.').replace('\(D\)','D.').replace('\(E\)','E.').replace('\(F\)','F.'); 
        content = content.replace('<br/>','');
        content = content.replace('<br>','');
        content = content.replace('</p><p>'); 
        content = content.replace('<x','\\lt x');

        return content;    
    }

设置选项:

    function setChoiceItem()
    {
        var list =['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q'];
        var ue = UE.geEditor('question-content');
        var content = formatContent(ue.getContent());
        console.log(content);
        var str = content;

        //console.log(getOption(str,'A','B'));
        //console.log(getOption(str,'B','C'));
        //console.log(getOption(str,'C','D'));
        //console.log(getOption(str,'D','$'));

        //$('p.optionContent:eq(0)').html(getOption(content,'A','B'));
        //$('p.optionContent:eq(1)').html(getOption(content,'B','C'));
        //$('p.optionContent:eq(2)').html(getOption(content,'C','D'));
        //$('p.optionContent:eq(3)').html(getOption(content,'D','$'));
        
        var len = $('p.optionContent').length; 

        $('p.optionContent').each(function(index,e){

            console.log(list[index]);console.log(len);

            var start = list[index];
            var end = list[index+1];
            if(index == len-1) 
            {
                end='$';
            }

            $(this).html(getOption(content,start,end));

        });

    }

正则表达式“正向匹配和反向匹配”的妙用

相信大家在看正则表达式语法的时候都会遇到下面几种:正向肯定,正向否定,反向肯定,反向否定

1、(?=pattern)

正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串。

这是一个非获取匹配,该匹配不需要获取供以后使用。

例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,

但不能匹配“Windows3.1”中的“Windows”。

预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,

而不是从包含预查的字符之后开始。

2、(?!pattern)

正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串。

这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。

例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,

但不能匹配“Windows2000”中的“Windows”。

3、(?<=pattern)

反向肯定预查,与正向肯定预查类似,只是方向相反。

例如,“(?<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”,

但不能匹配“3.1Windows”中的“Windows”。

4、(?<!pattern)

反向否定预查,与正向否定预查类似,只是方向相反。

例如“(?<!95|98|NT|2000)Windows”能匹配“3.1Windows”中的“Windows”,

但不能匹配“2000Windows”中的“Windows”。

我第一次看的时候就觉得很难理解,读了两遍好不容易理解了,但是一直用不上,直到工作需要……………

str = “111/;hkakdhaldladhl;gddhkshls;hhhh”
用 ; 切割字符串,要求切割结果是111/;hkakdhaldladhl gddhkshls hhhh,也就是第一个;前面有/,所以第一个;不分割,只分割后面的;

这其实就用到了反向否定,将python里面的split函数和正则表达式完美结合在一起,大家根据我的例子再去理解正(反)向否(肯)定匹配,肯定就更清晰了
python代码实现:

import re

str = “111/;hkakdhaldladhl;gddhkshls;hhhh”
str_list = re.split(r”(?<!\/);”,str)
print(str_list)
结果:

注:?<! 是反向否定的意思, \/ 是对 / 做了转义

为了能记得住,我总结了下面的规律,供参考~~

“肯定” 就是出现在?<! ?<= ?! ?= 后面那些字符,我们要匹配的字符串带这个才去匹配

“否定”就是出现在?<! ?<= ?! ?= 后面那些字符,我们要匹配的字符串不带这个才去匹配

“正反向”就是例子里面windows在 ?<! ?<= ?! ?= 以及后面字符的前面还是后面,windows在后是反向,在前是正向

记起来就是,四种都要带? 肯定的是= 否定的是! 如果是反向就加上<

Django根据已有的数据库来生成模型

日常开发中,我们有时会碰到数据库已经存在,而需要我们去生成模型的情况。这种情况下,我们需要:

Django中配置好数据库,确保连接得上这个已经存在的数据库
在cmd中运行命令,模型会生成在同一个文件中

 python manage.py inspectdb > models.py


修改模型
3.1 修改模型名,根据需求修改模型的名称
3.2 将不同的表放进其所属的app中
3.3 处理好表之间的外键关系(主要针对跨app的表,如果外键在同一个模型文件中,则可以跳过该步骤),在外键前加上app_name
3.4 让Django能够管理该模型并进行迁移:将Meta下的managed = False删除
3.5 当有多对多关系的表时,删除模型中的中间表,使用ManyToManyField来实现多对多,注意要设置中间表的名称让其与数据库中的中间表名一致
3.6 切记不要修改模型中的表名称,与数据库不一致的话会导致找不到表的错误
运行 python manage.py makemigrations
运行 python manage.py migrate –fake-initial
其中,在修改模型的时候,重点是需要分析好表与表之间的关系,只要能够弄清楚表与表之间的关系,那么修改模型会轻松很多

Django学习笔记:KeyError

处理Python关于Dict的错误KeyError的办法挺多,不过就记下了2个:

方法一:使用setdefault()设置默认值,如

data.setdefault('error', 0)

方法二:导入collections,使用defaultdict方法

data = collections.defaultdict(list, data)