将多个字符串连接成一个字符串。
concat(str1, str2,…) 返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。
但是输入sql语句麻烦了许多,三个字段需要输入两次逗号,如果10个字段,要输入九次逗号…麻烦死了啦,有没有什么简便方法呢?——于是可以指定参数之间的分隔符的concat_ws()来了!!!
和concat()一样,将多个字符串连接成一个字符串,但是可以一次性指定分隔符~(concat_ws就是concat with separator)
concat_ws(separator, str1, str2, …)
说明:第一个参数指定分隔符。需要注意的是分隔符不能为null,如果为null,则返回结果为null。
FROM_UNIXTIME(unix_timestamp,format)
mysql> select FROM_UNIXTIME(1344954515,'%Y-%m-%d %H:%i:%S');
+-----------------------------------------------+
| FROM_UNIXTIME(1344954515,'%Y-%m-%d %H:%i:%S') |
+-----------------------------------------------+
| 2012-08-14 22:28:35 |
+-----------------------------------------------+
1 row in set (0.00 sec)
UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date)
mysql> select UNIX_TIMESTAMP('2012-09-04 18:17:23');
+---------------------------------------+
| UNIX_TIMESTAMP('2012-09-04 18:17:23') |
+---------------------------------------+
| 1346753843 |
+---------------------------------------+
1 row in set (0.00 sec)
实际应用中,我们可以将格式转换为毫秒的与数据库中进行比较,也可以将数据库的Int格式转换为普通格式进行比较。
例如:查询所有创建日期大于2012-09-03 18:00:00之后的博客数据
方法一:将日期转换为int比较
select * from blog where createdTime > UNIX_TIMESTAMP('2012-09-03 18:00:00' );
方法二:将int转换为时间格式比较
select * from blog where FROM_UNIXTIME(createdTime, '%Y-%m-%d %H:%i:%S') > '2012-09-03 18:00:00';
备注:
1、如果expr1为NULL,返回值为 expr2,否则返回expr1。
2、适用于数字型、字符型和日期型,但是 expr1和expr2的数据类型必须为同类型。
select collect_set(d.dname)[0],count(*) num from emp e
join dept d on e.deptno=d.deptno
where e.sal<=2500
group by e.deptno
order by num desc limit 1
计算数组的大小
size(collect_set(compant_name))
当我们要进行一些简单的糊涂查询时用百分号(%),通配符(_)
就可以了.其中%表达任意长度的字符串,_表示任意的某一个字符。但如果在一些复杂的查询中关用这两个符号sql语句就会非常复杂,而且也不一定能实现.从Oracle 10g开始引入了在其他程序语言中普通使用的正则表达式。主要有regexp_like(匹配),regexp_replace(替换),regexp_substr(提取),regexp_instr(包含)四个正则表达式函数。
regexp_like(x,pattern[,match_option])
含义:查看x是否与pattern相匹配,该函数还可以提供一个可选的参数match_option字符串说明默认的匹配选项。match_option的取值如下:
select * from emp where regexp_like(ename,'^a[a-z]*n$')解析:
从emp表中匹配ename字段,要求以a开头,a-z任意多个字符(包括0个),n结尾。
例如ename为arwen或arwin或anden.但Arwen不能被匹配.因为默认是区分大小写。select * from emp where regexp_like(ename,'^a[a-z]*n$','i')可以查找ename为Arwen的行记录。
含义:用于在x中查找pattern。返回pattern在x中出现的位置。匹配位置从1开始。可以参考字符串函数 INSTR(),参数相关:
SELECT REGEXP_INSTR('hello world','o',1,1,0);
==》5 解析:
查找o在hello word中第一次出现的位置。
start=1,occurrence=1,return_option=0SELECT REGEXP_INSTR('hello world','o',1,1,1);
==》6查找o在hello word中第一次出现后的字符的位置,这里return_option=1也可以等于其他非0整数。SELECT REGEXP_INSTR('hello world','o',1,2,0);
==》8查找o在hello word中第二次出现的位置(空格也属于一个字符位置)。
**含义:**用于在x中查找pattern并返回。可以参考字符串函数 SUBSTR(),参数同REGEXP_INSTR函数。
SELECT REGEXP_SUBSTR('hello world','l{2}');
==》ll解析:
查询到匹配的字符串才返回匹配的字符.没查到就返回空。
含义:用于在x中查找pattern,并将其替换为replae_string。可以参考字符串函数 REPLACE(),参数同REGEXP_INSTR函数。
REPLACE(String,from_str,to_str) 即:将String中所有出现的from_str替换为to_str。注意:from_str不能是空字符串 ('')。
SELECT REGEXP_REPLACE('hello world','o','x',1,1);
==》hellx world解析:
start=1,occurrence=1。SELECT REGEXP_REPLACE('hello world','o','x');
==》hellx wxrldSELECT REGEXP_REPLACE('hello world','o','x',1,2);
==》hello wxrld
因为Hive中没有主键,mysql严格要求主键,可以将待确认字段作为主键。
select
count(*) cnt ,count(distinct order_id) order_cnt
from orders
//结果:
cnt order_cnt
3421083 3421083
select
order_id,count(1)
from orders
group by order_id
having count(1)>1
//结果:
order_id count(1) # 表示没有重复值
select
pripid,count(1)
from orders
group by pripid
having count(1)>1
insert overwrite table stu_tab
select distinct * from stu_tab;
通过过滤不同的行,将原表进行覆盖。
根据情况我们将含有2的那行数据进行删除;
insert overwrite table sys_cus_hz_20210127
select distinct * from sys_cus_hz_20210127 where consumlevel != 2;
insert overwrite table emp_tab
select id,name,sal from (
select * ,
row_number() over(partition by id order by sal desc) rank
from emp_tab)t1
where t1.rank=1;
select distinct id from stu_tab;
#单个字段去重
select distinct id,name from stu_tab;
#多个字段之间通过逗号去重
这行代码的意思是先对COL1列进行分组,然后按照COL2进行排序,row_number()函数是对分组后的每个组内记录按照COL2排序标号,我们最后取的时候就拿标号为1的一条记录,即达到我的需求。
SELECT
*,
Row_Number() OVER (partition by deptid ORDER BY salary desc) rank
FROM employee
SELECT *
from( select
*,
Row_Number() OVER (partition by deptid ORDER BY salary desc) as rank
FROM employee) t1
where t1.rank=1
只保留rank=1的数据。
快捷组合 | 含义 |
---|---|
i | vim状态下的插入 |
esc+wq | vim状态下保存退出 |
shift+z+z | vim状态下强制保存退出 |
ctrl+c | 强制停止运行 |
ctrl+l | 清空终端返回最上面 |
scp | 拷贝 |
rsync | 同步更新 |
本文发布于:2024-02-02 15:18:01,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170685828044658.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |