今天主要是对业务进行了解,一遍进行后期代码的编写任务:
讲几个项目中要用到的函数,之前没有见过的
1.nvl
nvl(statement,statement2)
这个函数的作用是,如果statement的值是null的话,则函数的输出值为statement2
如果statement的值不是null的话,则函数的输出值为statement
做人千万不要逃避问题
2.str_to_map(字符串参数, 分隔符1, 分隔符2)
这个也是第一次见,之前根本没有用到过
就是将一个字符串进行两次切分,第一次切分形成一个K-V键值对,第二次再次进行切分,将第一个键值对切分成最终的键值对,举个例子,从别人的博客上盗的
同时复习一下concat的用法,很简单就是字符串的拼接
create table table_a
(column1 string not null,
column2 map notnull)
简单的创建一个表,其中有一个字段的类型是map型的
然后就开始进入正题:
insert overwrite table_a
select concat('col1:'+b.id+'&col2:'+b.name+'&col3:'+b.age) as column1 comment '原始字段',
str_to_map(concat('&col1:'+b.id+'&col2:'+b.name+'&col3:'+b.age) ,'&',':') as column2 '经过处理的map值'
from table_b as b
这个时候table_a中就有了相关的数据
这个时候我们就可以直接取值
select
column2,
column2['col1']as col_example
from table_a;
还有什么,奥就是case when 后面不应该是表达式,我想着表达式写成聚合函数,答案是我脑袋秀逗了,不能;
3. cast的用法
cast就是一个转换字符类型的小函数
用处不大也不小,比如下面这个案例
SELECT name, salary FROM employees
WHERE cast(salary AS FLOAT) = 100.0;
啥意思啊,就是在where条件语句中说必须满足一个条件,什么条件,就是salary通过cast转化为float型后必须要等于100.0
这样salary将会显示的转换成float。如果salary是不能转换成float,这时候cast将会返回NULL!
还可以嵌套转着用
SELECT (cast(cast(a as string) asdouble)) from src;
有效的转换结果
cast(date as date) 返回date类型
cast(timestamp as date) timestamp中的年/月/日的值是依赖与当地的时区,结果返回date类型
cast(string as date) 如果string是YYYY-MM-DD格式的,则相应的年/月/日的date类型的数据将会返回;但如果string不是YYYY-MM-DD格式的,结果则会返回NULL。
cast(date as timestamp) 基于当地的时区,生成一个对应date的年/月/日的时间戳值
cast(date as string) date所代表的年/月/日时间将会转换成YYYY-MM-DD的字符串。
然后下面来说应该是今天的最后一个知识点了
就是MySQL中的UNIX_TIMESTAMP函数有两种类型供调用
1 无参数调用:UNIX_TIMESTAMP()
返回值:自'1970-01-01 00:00:00'的到当前时间的秒数差 1970-01-01 00:00:00是个什么鬼 是计算机元年
例子:SELECT UNIX_TIMESTAMP() from table_example => 1339123415
2 有参数调用:UNIX_TIMESTAMP(date)
其中date可以是一个DATE字符串,一个DATETIME字符串,一个TIMESTAMP或者一个当地时间的YYMMDD或YYYMMDD格式的数字
返回值:自'1970-01-01 00:00:00'与指定时间的秒数差
举例说明:
DATE字符串格式:(日期类型)
SELECT UNIX_TIMESTAMP(‘2012-06-08’) => 1339084800
SELECT UNIX_TIMESTAMP(CURRENT_DATE()) =>1339084800
注:CURRENT_DATE ()的返回值是一个DATE字符串格式
以下几种格式返回的结果相同:
SELECT UNIX_TIMESTAMP('20120608');
SELECT UNIX_TIMESTAMP('2012-6-8');
SELECT UNIX_TIMESTAMP('2012-06-08');
结果都是:1339084800
网友评论