标签 函数 下的文章
Centos7.6快速编译安装Nginx-1.14.2 及Php7.3.0
操作系统版本:
cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
安装扩展包并更新系统内核:
yum install epel-release -y
yum update -y
安装基础依赖组件
yum install wget vim pcre pcre-devel openssl openssl-devel libicu-devel gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel ncurses ncurses-devel curl curl-devel krb5-devel libidn libidn-devel openldap openldap-devel nss_ldap jemalloc-devel cmake boost-devel bison automake libevent libevent-devel gd gd-devel libtool* libmcrypt libmcrypt-devel mcrypt mhash libxslt libxslt-devel readline readline-devel gmp gmp-devel libcurl libcurl-devel openjpeg-devel openssl openssl-devel sqlite sqlite-devel oniguruma oniguruma-devel -y
Oracle sql日期比较及函数
oracle sql日期比较:
在今天之前:
select * from abtable where TS < to_date('2018-07-03 00:00:00','yyyy-mm-dd hh24:mi:ss') AND TS <= to_date('2018-07-03 00:00:00','yyyy-mm-dd hh24:mi:ss')
在今天之后:
select * from abtable where TS > to_date('2018-07-03 00:00:00','yyyy-mm-dd hh24:mi:ss') AND TS >= to_date('2018-07-03 00:00:00','yyyy-mm-dd hh24:mi:ss')
如果TS字段为
ts CHAR(19) default to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),
可以直接用日期查询:
select * from bd_corp where PK_CORP IN(1015,1156) AND TS < '2017-12-31 23:59:59' AND TS > '2015-01-01 00:00:00'
精确时间:
select * from TESTTB where CREATE = to_date('2018-07-03 00:00:00','yyyy-mm-dd hh24:mi:ss')
between 操作符
-- 在where 子句中使用,选取介于两个值之间的数据范围,这些值可以是数字,文本,日期
------- 不同的数据库对 BETWEEN...AND 操作符的处理方式是有差异的。
------- 某些数据库会列出介于 "Adams" 和 "Carter" 之间的人,但不包括 "Adams" 和 "Carter" ;
------- 某些数据库会列出介于 "Adams" 和 "Carter" 之间并包括 "Adams" 和 "Carter" 的人;
------- 而另一些数据库会列出介于 "Adams" 和 "Carter" 之间的人,包括 "Adams" ,但不包括 "Carter" 。
在某段时间内:
select * from TESTTB where CREATE between to_date('2018-07-03 00:00:00','yyyy-mm-dd hh24:mi:ss') and to_date('2018-07-03 00:00:00','yyyy-mm-dd hh24:mi:ss')
select * from up_date where update < to_date('2018-07-03 00:00:00','yyyy-mm-dd hh24:mi:ss') and update > to_date('2018-07-03 00:00:00','yyyy-mm-dd hh24:mi:ss')
或者
select * from bd_corp where PK_CORP IN(1015,1156) AND TS < '2017-12-31 23:59:59' AND TS > '2015-01-01 00:00:00'
Oracle 获取当前日期及日期格式
获取系统日期: SYSDATE()
格式化日期:
TO_CHAR(SYSDATE(),'YY/MM/DD HH24:MI:SS)
或 TO_DATE(SYSDATE(),'YY/MM/DD HH24:MI:SS)
格式化数字:
TO_NUMBER
注: TO_CHAR 把日期或数字转换为字符串
TO_CHAR(number, '格式')
TO_CHAR(salary, '$99,999.99')
TO_CHAR(date, '格式')
TO_DATE 把字符串转换为数据库中的日期类型
TO_DATE(char, '格式')
TO_NUMBER 将字符串转换为数字
TO_NUMBER(char, '格式')
返回系统日期:
SQL> select sysdate from dual;
SYSDATE
--------------
03-7月 -18
mi是分钟
SQL> select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;
TO_CHAR(SYSDATE,'YYYY-MM-DDHH24:MI:SS'
--------------------------------------
2018-07-03 11:15:59
mm会显示月份
SQL> select to_char(sysdate,'yyyy-MM-dd HH24:mm:ss') from dual;
TO_CHAR(SYSDATE,'YYYY-MM-DDHH24:MM:SS'
--------------------------------------
2018-07-03 11:07:39
SQL> select to_char(sysdate,'yy-mm-dd hh24:mi:ss') from dual ;
TO_CHAR(SYSDATE,'YY-MM-DDHH24:MI:S
----------------------------------
18-07-03 11:17:09
转换的格式:
表示 year 的:y 表示年的最后一位 、
yy 表示年的最后2位 、
yyy 表示年的最后3位 、
yyyy 用4位数表示年
表示month的: mm 用2位数字表示月 、
mon 用简写形式, 比如11月或者nov 、
month 用全称, 比如11月或者november
表示day的:dd 表示当月第几天 、
ddd 表示当年第几天 、
dy 当周第几天,简写, 比如星期五或者fri 、
day 当周第几天,全称, 比如星期五或者friday
表示hour的:hh 2位数表示小时 12进制、
hh24 2位数表示小时 24小时
表示minute的:mi 2位数表示分钟
表示second的:ss 2位数表示秒 60进制
表示季度的:q 一位数 表示季度 (1-4)
另外还有ww 用来表示当年第几周 w用来表示当月第几周。
24小时制下的时间范围:00:00:00-23:59:59
12小时制下的时间范围:1:00:00-12:59:59
数字格式: 9 代表一个数字
0 强制显示0
$ 放置一个$符
L 放置一个浮动本地货币符
. 显示小数点
, 显示千位指示符
当前时间减去7分钟的时间
select sysdate,sysdate - interval '7' MINUTE from dual;
当前时间减去7小时的时间
select sysdate - interval '7' hour from dual;
当前时间减去7天的时间
select sysdate - interval '7' day from dual;
当前时间减去7月的时间
select sysdate,sysdate - interval '7' month from dual;
当前时间减去7年的时间
select sysdate,sysdate - interval '7' year from dual;
时间间隔乘以一个数字
select sysdate,sysdate - 8*interval '7' hour from dual;
含义解释:
Dual伪列
Dual 是 Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的select语句块中。
不同系统可能返回日期的格式不一样。
返回当前连接的用户:select user from dual;
1、上月末天:
SQL> select to_char(add_months(last_day(sysdate),-1),'yyyy-MM-dd') LastDay from dual;
LASTDAY
--------------------
2018-06-30
2、上月今天
SQL> select to_char(add_months(sysdate,-1),'yyyy-MM-dd') PreToday from dual;
PRETODAY
--------------------
2018-06-03
3、上月首天
SQL> select to_char(add_months(last_day(sysdate)+1,-2),'yyyy-MM-dd') firstDay from dual;
FIRSTDAY
--------------------
2018-06-01
4、按照每周进行统计
SQL> select to_char(sysdate,'ww') from dual group by to_char(sysdate,'ww');
TO_C
----
27
5、按照每月进行统计
SQL> select to_char(sysdate,'mm') from dual group by to_char(sysdate,'mm');
TO_C
----
07
6、按照每季度进行统计
SQL> select to_char(sysdate,'q') from dual group by to_char(sysdate,'q');
TO
--
3
7、按照每年进行统计
SQL> select to_char(sysdate,'yyyy') from dual group by to_char(sysdate,'yyyy');
TO_CHAR(
--------
2018
8、要找到某月中所有周五的具体日期
SQL> select to_char(t.d,'YY-MM-DD') from (
2 select trunc(sysdate, 'MM')+rownum-1 as d
3 from dba_objects
4 where rownum < 32) t
5 where to_char(t.d, 'MM') = to_char(sysdate, 'MM') --找出当前月份的周五的日期
6 and trim(to_char(t.d, 'Day')) = '星期五'
7 ;
TO_CHAR(T.D,'YY-
----------------
18-07-06
18-07-13
18-07-20
18-07-27
如果把where to_char(t.d, 'MM') = to_char(sysdate, 'MM')改成sysdate-90,即为查找当前月份的前三个月中的每周五的日期。
MySQL创建函数-存储过程报“ERROR 1418 ”错误 解决方法
MySQL创建函数或存储过程的时候报error 1418错误:
This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
是因为log_bin_trust_function_creators参数在起作用:
当二进制日志启用后,这个变量就会启用。它控制是否可以信任存储函数创建者,不会创建写入二进制日志引起不安全事件的存储函数。
如果设置为0(默认值),用户不得创建或修改存储函数,除非它们具有除CREATE ROUTINE或ALTER ROUTINE特权之外的SUPER权限。 设置为0还强制使用DETERMINISTIC特性或READS SQL DATA或NO SQL特性声明函数的限制。 如果变量设置为1,MySQL不会对创建存储函数实施这些限制,此变量也适用于触发器的创建。
mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON |
+---------------+-------+
1 row in set (0.00 sec)
mysql> show variables like '%log_bin_trust_function_creators%';
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| log_bin_trust_function_creators | OFF |
+---------------------------------+-------+
1 row in set (0.00 sec)
如果数据库没有使用主从复制,那么就可以将参数log_bin_trust_function_creators设置为1。
mysql> set global log_bin_trust_function_creators=1;
这个动态设置的方式会在服务重启后失效,所以我们还必须在my.cnf中设置,加上
log_bin_trust_function_creators=1
这样就会永久生效。
注意:如果开启了主从复制,同时又打开了log_bin_trust_function_creators参数,可以创建函数、存储过程,可能会引起主从复制故障·
MySQL5.7.x中group concat函数数据被截断问题解决
MySQL5.6中没这个问题,5.7中存在group concat函数数据被截断的问题,查询默认初始设置
mysql> show variables like 'group_concat_max_len';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| group_concat_max_len | 1024 |
+----------------------+-------+
1 row in set (0.00 sec)
能查询出来,但是查询结果异常,
MySQL官方手册 对它的定义是 The maximum permitted result length in bytes for the GROUP_CONCAT() function. ,也就是它限制了 GROUP_CONCAT 数据的长度。
https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html
The maximum value for group_concat_max_len for 64-bit is 18446744073709551615
The maximum value for group_concat_max_len for 32-bit is 4294967295
解决方法:
1、修改MySQL配置文件my.cnf,在[mysqld]节点中添加
group_concat_max_len = 18446744073709551615
2、更改全局配置
SET GLOBAL group_concat_max_len=18446744073709551615;
SET SESSION group_concat_max_len=18446744073709551615;
使配置在当前会话中也立即生效,其它已经登录的会话终端需要重启生效,查询查询结果正常。
MySQL replace函数替换字符串语句的用法
如你要将表 ab 里面的 f1 字段的abc替换为def
UPDATE ab SET f1=REPLACE(f1, 'abc', 'def');
这个函数是多字节安全的。
Oracle查询所有用户表、视图、存储函数、过程
视图(view),也称虚表, 不占用物理空间,这个也是相对概念,因为视图本身的定义语句还是要存储在数据字典里的。视图只有逻辑定义。每次使用的时候, 只是重新执行SQL.
视图是从一个或多个实际表中获得的,这些表的数据存放在数据库中。那些用于产生视图的表叫做该视图的基表。一个视图也可以从另一个视图中产生。
视图的定义存在数据库中,与此定义相关的数据并没有再存一份于数据库中。通过视图看到的数据存放在基表中。
视图看上去非常象数据库的物理表,对它的操作同任何其它的表一样。当通过视图修改数据时,实际上是在改变基表中的数据;相反地,基表数据的改变也会自动反映在由基表产生的视图中。由于逻辑上的原因,有些Oracle视图可以修改对应的基表,有些则不能(仅仅能查询)。
select * from user_views;
查询用户下的所有表
select table_name from all_tables where owner = upper('TANAME');
MySQL聚合函数GROUP_CONCAT()实现合并多个记录
语法如下:
group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])
一般配合group by 一起使用。
举例:
以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 ';') fromaa 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)
php中调用系统命令
hp提供了system(),exec(),passthru()这三个函数来调用外部的命令.
虽然这三个命令都能执行linux系统的shell命令,但是其实他们是有区别的:
system() 输出并返回最后一行shell结果。
exec() 不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面。
passthru() 只调用命令,把命令的运行结果原样地直接输出到标准输出设备上。
相同点:都可以获得命令执行的状态码
在PHP中调用外部命令,可以用如下三种方法来实现:
1) 用PHP提供的专门函数
PHP提供了3个专门的执行外部命令的函数:system(),exec(),passthru()。
system()
原型:string system (string command [, int return_var])
system()函数和其它语言中的差不多,它执行给定的命令,输出和返回结果。第二个参数是可选的,用来得到命令执行后的状态码。
php页面调用vnstat显示机器网卡流量
在php页面上实时显示网卡流量,调用的是vnstat,可以实时、按小时、按月份统计网卡流量
通用安装
debian/ubuntu安装
apt-get install vnstat -y
/etc/init.d/vnstat start
update-rc.d vnstat enable
或
RHEL/CentOS安装:
yum install vnstat -y
/etc/init.d/vnstat start
chkconfig vnstat on
vnstat基本使用命令
vnstat -i eth0 -l #实时流量情况
vnstat -i eth0 -h #按小时查询流量情况
vnstat -i eth0 -d #按天数查询流量情况
vnstat -i eth0 -m #按月数查询流量情况
vnstat -i eth0 -w #按周数查询流量情况
vnstat -i eth0 -t #查询TOP10流量情况
vnstat -i eth0 -q #查询vnstat数据库流量情况
更多命令帮助信息可以 vnstat --help 进行查看。
Flask入门二:路由规则的理解
Flask的路由规则是基于Werkzeug的路由模块,基本功能就是两点:
1、给出一个URL,匹配到它对应的处理函数,进行下一步处理操作;
2、给出函数能反推构造出URL;
带参数的路由:
@app.route('/hello/<name>')
def hello(name):
return 'Hello %s' % name