标签 函数 下的文章

Centos7.6快速编译安装Nginx-1.14.2 及Php7.3.0

PHP7.3.png
操作系统版本:

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 -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;

使配置在当前会话中也立即生效,其它已经登录的会话终端需要重启生效,查询查询结果正常。

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 进行查看。










---阅读剩余部分---

最新

分类

归档

评论

  • Liang: 贴下编译参数和步骤,...
  • shao3911: 您好,为什么我在编译...
  • aliang: 先看是yum安装还是...
  • aliang: 将原来的nginx安...
  • yen: 3、如果要回滚的话,...
  • yen: 刚好需要升级ngin...
  • 文雨: 一些新的method...
  • aliang: 默认不屏蔽估计开发团...
  • 山野愚人居: PHP既然允许直接使...
  • aliang: 最下面有github地址·

其它