SQL練習(xí)題二十九-每季十題(八)

331. 提取JSON中的value值

  1. get_json_object
    語(yǔ)法:get_json_object(json_string, ‘$.key’),注意事項(xiàng):這個(gè)函數(shù)每次只能返回一個(gè)數(shù)據(jù)項(xiàng)
select 
get_json_object('{"company":"阿里","age":18}','$.ompany'),
get_json_object('{"company":"拼多多","age":18}','$.age');
  1. json_tuple
    語(yǔ)法:json_tuple(json_string, k1, k2 …),解析多個(gè)字段不加 $ hive:函數(shù):json_tuple處理json數(shù)據(jù)
如下:
hive> select * from json_test;
select * from json_test
OK
1   {"name":"孫先生","carrer":"大數(shù)據(jù)開(kāi)發(fā)工程師","dream":["開(kāi)個(gè)便利店","去外面逛一逛","看本好書(shū)"],"friend":{"friend_1":"MM","friend_2":"NN","friend_3":"BB","friend_4":"VV"}}
2   {"name":"唐女士","carrer":"退休農(nóng)民","dream":["兒子聽(tīng)話","帶孫子"],"friend":{"friend_1":"CC"}}
-- 提取二級(jí)格式下的數(shù)據(jù)(如好友1)
select good_friend_1
from temp_db.json_test
lateral view json_tuple(str,'friend') dd as good_friend
lateral view json_tuple(good_friend,'friend_1') tb as good_friend_1;
查詢結(jié)果:
MM
CC
 
-- 提取標(biāo)簽中所有的內(nèi)容(沒(méi)有的標(biāo)簽,返回null)
select good_friend_1,good_friend_2,good_friend_3
from temp_db.json_test
lateral view json_tuple(str,'friend') dd as good_friend
lateral view json_tuple(good_friend,'friend_1','friend_2','friend_3') tb as good_friend_1,good_friend_2,good_friend_3;
 
查詢結(jié)果:
MM  NN  BB
CC  NULL    NULL
--dreaming string格式轉(zhuǎn)數(shù)組(string不可以直接轉(zhuǎn)數(shù)組的定血,即使string的數(shù)據(jù)符合數(shù)組的格式)
select regexp_replace(regexp_replace(regexp_replace(dreaming, '\\[', ''),'\\]',''),'\\"','')
from temp_db.json_test
lateral view  json_tuple(str,'dream') dd as dreaming;
查詢結(jié)果:
開(kāi)個(gè)便利店,去外面逛一逛,看本好書(shū)
兒子聽(tīng)話,帶孫子
  1. 嵌套子查詢解析json數(shù)組
[{“website”:“baidu.com”,“name”:“百度”},{“website”:“google.com”,“name”:“谷歌”}]

解析為

website name
baidu.com   百度
google.com  谷歌
SELECT explode(split(
    regexp_replace(
        regexp_replace(
            '[
                {"website":"baidu.com","name":"百度"},
                {"website":"google.com","name":"谷歌"}
            ]', 
            '\\[|\\]' , ''), 將json數(shù)組兩邊的中括號(hào)去掉
            
              '\\}\\,\\{' , '\\}\\;\\{'), 將json數(shù)組元素之間的逗號(hào)換成分號(hào)
                
                 '\\;') 以分號(hào)作為分隔符(split函數(shù)以分號(hào)作為分隔)
          ); 


嵌套一層json_tuple
select json_tuple(json, 'website', 'name') 
from (
select explode(split(regexp_replace(regexp_replace('[{"website":"baidu.com","name":"百度"},{"website":"google.com","name":"谷歌"}]', '\\[|\\]',''),'\\}\\,\\{','\\}\\;\\{'),'\\;')) 
as json) t;
  1. 使用 lateral view 解析json數(shù)組
    lateral view通常和UDTF一起出現(xiàn)岩饼,為了解決UDTF不允許在select存在多個(gè)字段的問(wèn)題
goods_id    json_str
1,2,3   [{“source”:“7fresh”,“monthSales”:4900,“userCount”:1900,“score”:“9.9”},{“source”:“jd”,“monthSales”:2090,“userCount”:78981,“score”:“9.8”},{“source”:“jdmart”,“monthSales”:6987,“userCount”:1600,“score”:“9.0”}]
select good_id,get_json_object(sale_json,'$.monthSales') as monthSales
from tableName 
LATERAL VIEW explode(split(goods_id,','))goods as good_id 
LATERAL VIEW explode(split(regexp_replace(regexp_replace(json_str , '\\[|\\]',''),'\\}\\,\\{','\\}\\;\\{'),'\\;')) sales as sale_json;

332. 提取JSON中 key值

[{“website”:“baidu.com”,“name”:“百度”},{“website”:“google.com”,“name”:“谷歌”}]
select rn
      ,val as key
from(
    select pos+1 as rn
          ,val
    from(
        select regexp_replace(translate('[{"website":"baidu.com","name":"百度"},{"website":"google.com","name":"谷歌"}]'
                          ,'[]{}""','') ,'\,','\:') as str
    ) t1 lateral view posexplode(split(str,':')) t2 as pos,val
) m 
where rn%2=1 

提供了一種方法粟关,主要的思路還是正則和炸裂的使用

website:baidu.com:name:百度:website:google.com:name:谷歌

這里有個(gè)難點(diǎn)是怎么獲取奇數(shù)值岩臣,作者使用了posexplode函數(shù)烈评,第一個(gè)值是索引伐蒋,第二是值是value值工三,我在想其實(shí)不用吧 ,--> :

333. 遍歷字符串

  1. 'a,b,c,d,e,f'
select posexplode(split('a,b,c,d,e,f',','))
  1. "abcdef"

先根據(jù)字符串長(zhǎng)度生成對(duì)應(yīng)的索引

select posexplode(split(space(length("abcdef")-1),' '))

針對(duì)生成的索引值按行進(jìn)行展開(kāi)

select 'abcdef' as str
      ,pos --索引
      ,substr("abcdef",pos+1,1)
      ,substr("abcdef",0,pos+1)
from(
select posexplode(split(space(length("abcdef")-1),' '))
) t

(1)利用posexplode()函數(shù)生成索引
(2)已知某個(gè)長(zhǎng)度值,根據(jù)長(zhǎng)度值生成索引的方法先鱼。space()函數(shù)及posexplode()函數(shù)
(3)通過(guò)索引值及substr()函數(shù)獲取當(dāng)前索引處的字符串值俭正。

334. 刪除字符串中多余的字符 translate(input, from, to)

input:輸入字符串【集是要被替換的字符串】
from:需要匹配的字符【即需要被替換的字符】,這里一定要注意是字符不是字符串
to :用哪些字符來(lái)替換被匹配到的字符

  1. 如果 from 字符串長(zhǎng)度=to的字符串長(zhǎng)度焙畔,如translate(“abcdef-abcdef”,“abcdef”,“123456”);替換不是說(shuō)把"abcdef"替換成"123456"掸读,而是把a(bǔ)替換成1,把b替換成2宏多,把c替換成3儿惫,把d替換成4,e替換成5伸但,f替換成6姥闪。
  2. 如果 from 字符串長(zhǎng)度>to的字符串長(zhǎng)度 ,例如TRANSLATE(‘a(chǎn)bcdef-abcdef’,‘a(chǎn)dbc’,‘123’) 意思是把 a替換為1砌烁,b替換為2筐喳,c替換為3催式,d替換為空,即刪除掉
  3. 如果 from里有重復(fù)字符 比如abca避归,1231荣月,重復(fù)的字符a對(duì)應(yīng)to的替換不會(huì)起作用
  4. from長(zhǎng)度<to的長(zhǎng)度,不報(bào)錯(cuò)但是to里面長(zhǎng)的字符沒(méi)有意義梳毙。
select 
TRANSLATE('abcdef-abcdef','abcd','1234'),--1234ef-1234ef
TRANSLATE('abcdef-abcdef','abcd','123'), --123ef-123ef
TRANSLATE ('abcdaabbaaabbb','aa','12'),--1bcd11bb111bbb
TRANSLATE ('abcdaabbaaabbb','a','123')--1bcd11bb111bbb

335. 分離字符串中的字符和數(shù)字 repeat()

  1. 轉(zhuǎn)換為指定特征字符或特征數(shù)字
select data
      ,translate(lower(data),'abcdefghijklmnopqrstuvwxyz',repeat('*',26))
      ,translate(lower(data),'0123456789',repeat('$',10))
from books
  1. 刪除指定的特征字符
select data
      ,cast(regexp_replace(translate(lower(data),'abcdefghijklmnopqrstuvwxyz',repeat('*',26)),'\\*','') as bigint) as book_money
      ,regexp_replace(translate(lower(data),'0123456789',repeat('$',10)),'\\$','')  as book_name
from books  

336. 某個(gè)字符是否在字符串中

  1. 用like正則匹配
  2. 用locate()函數(shù)判斷
  3. 用regexp正則匹配哺窄。注意此時(shí)regxp()里面的正則為regexp(’.* 1.*’)

337. HIVE日期函數(shù)大全

【hive 日期函數(shù) 大全】Hive常用日期函數(shù)整理
 
注意:1)  hive 沒(méi)有 to_char函數(shù)  2) HIVE 日期函數(shù)只識(shí)別 年-月-日 不能識(shí)別 年-月 ,所以處理月份的時(shí)候需要特殊處理
 
1)hive 字符創(chuàng)拼接:
CONCAT(string A, string B…)
SELECT CONCAT('2019','05','11');
2) 字符截取
select substr(add_months(from_unixtime((unix_timestamp('2015-09','yyyy-MM')),'yyyy-MM-dd'),-1),0,7);  
SELECT SUBSTR(from_unixtime((unix_timestamp('201509','yyyyMM')),'yyyyMMdd'),0,6);
SELECT SUBSTR(from_unixtime((unix_timestamp('201509','yyyyMM')),'yyyy-MM-dd'),0,7);
 
hive (felix)> SELECT from_unixtime(unix_timestamp(cast('201509' as string),'yyyyMM'),'yyyy-MM-dd') ;
2015-09-01
Time taken: 0.06 seconds, Fetched: 1 row(s)
hive (felix)> SELECT from_unixtime(unix_timestamp(cast('201509' as string),'yyyyMM'),'yyyy-MM') ;
2015-09
 
select from_unixtime(unix_timestamp(add_months(from_unixtime((unix_timestamp('201509','yyyyMM')),'yyyy-MM-dd'),-1),'yyyy-MM-dd'),'YYYYMM') time_list
 
 
3) 時(shí)間區(qū)間獲取
 
4) 中英文日期轉(zhuǎn)換
hive (default)> select from_unixtime((unix_timestamp('201509','yyyyMM')),'MMM-YY');
OK
Sep-15
Time taken: 0.06 seconds, Fetched: 1 row(s)
 
hive (default)> SELECT from_unixtime(unix_timestamp('Sep-19','MMM-YY'),'yyyyMM');
OK
201812
---英文日期大寫(xiě)
hive (default)> select upper(from_unixtime((unix_timestamp('201509','yyyyMM')),'MMM-YY'));
OK
SEP-15
Time taken: 0.062 seconds, Fetched: 1 row(s)
 
 
 
1.unix_timestamp()
返回當(dāng)前時(shí)區(qū)的unix時(shí)間戳
返回類(lèi)型:bigint
hive (default)> SELECT UNIX_TIMESTAMP();
 
2.from_unixtime(bigint unixtime[,string format])
時(shí)間戳轉(zhuǎn)日期函數(shù)
返回類(lèi)型:string
hive (default)> select from_unixtime(unix_timestamp(),'yyyyMMdd') ;
20160614
 
3.unix_timestamp(string date)
返回指定日期格式的的時(shí)間戳
返回類(lèi)型:bigint
注意:如果后面只有date參數(shù)账锹,date的形式必須為'yyyy-MM-dd HH:mm:ss'的形式萌业。
hive (default)> select unix_timestamp('2020-05-01');
NULL
hive (default)> select unix_timestamp('2020-05-01 00:00:00');
1464710400
 
4.unix_timestamp(string date,string pattern)
返回指定日期格式的時(shí)間戳
返回類(lèi)型:bigint
hive (default)> select unix_timestamp('2020-05-01','yyyy-MM-dd');
1449331200
 
5.to_date(string date)
返回時(shí)間字段中的日期部分 必須是yyyy-MM-dd格式
返回類(lèi)型:string
 
說(shuō)明: 返回日期時(shí)間字段中的日期部分半沽。只能識(shí)別到 “年-月-日” 級(jí)別的時(shí)間若治,無(wú)法識(shí)別 “年-月” 級(jí)別的時(shí)間续搀。
--1) 注意 使用年月志鞍,to_date 日期是識(shí)別不了的
hive (default)> select to_date('2016-09');  --有問(wèn)題,結(jié)果為null
OK
NULL 
Time taken: 0.067 seconds, Fetched: 1 row(s)
 
hive (default)> select add_months('2020-05-01',-1);
OK
2020-04-01
 
hive (default)> select to_date('2020-05-01 00:00:00') ;
2020-05-01
 
hive (default)> select to_date('2020-05-01');
2020-05-01
 
 
6.year(string date)
返回時(shí)間字段中的年
返回類(lèi)型:int
hive (default)> select year('2020-05-01 00:00:00') ;
2016
hive (default)> select year('2020-05-01') ;
2016
 
7.month(string date)
返回時(shí)間字段中的月
返回類(lèi)型:int
hive (default)> select month('2020-05-01') ;
6
hive (default)> select month('2020-05-01');
6
 
8.day(string date)
返回時(shí)間字段中的天
返回類(lèi)型:int
hive (default)> select day('2020-05-01') ;
1
 
9搀擂、day:返回日期中的天
 
select day('2015-04-13 11:32:12');
輸出:13
 
10寻拂、hour:返回日期中的小時(shí)
 
select hour('2015-04-13 11:32:12');
輸出:11
 
11瓶佳、minute:返回日期中的分鐘
 
select minute('2015-04-13 11:32:12');
輸出:32
 
12桌粉、second:返回日期中的秒
 
select second('2015-04-13 11:32:56');
輸出:56
 
 
13.weekofyear(string date)
返回時(shí)間字段是本年的第多少周
返回類(lèi)型:int
hive (default)> select weekofyear('2020-05-01') ;
22
 
14.datediff(string enddate,string begindate)
返回enddate與begindate之間的時(shí)間差的天數(shù)
返回類(lèi)型:int
hive (default)> select datediff('2020-05-01','2016-05-01') ;
31
--DEMO 2 
hive (default)> SELECT datediff('2020-05-01 00:00:00','2016-05-01 23:00:00');
OK
31
 
15.date_add(string date,int days)
返回date增加days天后的日期
返回類(lèi)型:string
hive (default)> select date_add('2020-05-01',15) ;
2020-05-16
 
16.date_sub(string date,int days)
返回date減少days天后的日期
返回類(lèi)型:string
hive (default)> select date_sub('2020-05-01',15) ;
2016-05-17
 
17:Hive中取最近30天數(shù)據(jù)
datediff(CURRENT_TIMESTAMP ,gmt_create)<=30 
 
18蒸绩、Hive中 兩個(gè)日期相差多少小時(shí)
select (unix_timestamp('2018-05-25 12:03:55') - unix_timestamp('2018-05-25 11:03:55'))/3600
輸出:1
19、Hive中 兩個(gè)日期相差多少分鐘
select (unix_timestamp('2018-05-25 12:03:55') - unix_timestamp('2018-05-25 11:03:55'))/60
輸出:60
 
20铃肯、hive 計(jì)算某一個(gè)日期屬于星期幾患亿,如2018-05-20 是星期日
SELECT IF(pmod(datediff('2018-05-20', '1920-01-01') - 3, 7)='0', 7, pmod(datediff('2018-05-20', '1920-01-01') - 3, 7)) 
輸出:7
 
 
21、hive返回上個(gè)月第一天和最后一天
--上個(gè)月第一天
select trunc(add_months('2020-05-08',-1),'MM');  --只能識(shí)別 年-月-日 
select trunc(add_months(CURRENT_TIMESTAMP,-1),'MM')
 
hive (default)> select trunc(add_months('2020-05',-1),'MM'); 
OK
NULL
Time taken: 0.067 seconds, Fetched: 1 row(s)
hive (default)> select trunc(add_months('2020-05-08',-1),'MM'); 
OK
2020-04-01
Time taken: 0.079 seconds, Fetched: 1 row(s)
hive (default)> 
 
 
 
select concat(substr(add_months(from_unixtime(unix_timestamp(),'yyyy-MM-dd'),-1),1,7),'-01'); 

338. 時(shí)間序列--補(bǔ)全數(shù)據(jù)

date_id   a   b    c
2014     AB  12    bc
2015         23    
2016               d
2017     BC 

如何使用最新數(shù)據(jù)補(bǔ)全表格

date_id   a   b    c
2014     AB  12    bc
2015     AB  23    bc
2016     AB  23    d
2017     BC  23    d
select 
  date_id, 
  first_value(a) over(partition by aa order by date_id) as a,
  first_value(b) over(partition by bb order by date_id) as b,
  first_value(c) over(partition by cc order by date_id) as c
from
(
  select 
    date_id,
    a,
    b,
    c,
    count(a) over(order by date_id) as aa,
    count(b) over(order by date_id) as bb,
    count(c) over(order by date_id) as cc
  from t20
)tmp1;

339. like押逼,not like步藕,rlike, regexp的區(qū)別和使用詳解

  1. Rlike功能和like功能大致一樣宴胧,like是后面只支持簡(jiǎn)單表達(dá)式匹配(_%),而rlike則支持標(biāo)準(zhǔn)正則表達(dá)式語(yǔ)法。所以如果正則表達(dá)式使用熟練的話表锻,建議使用rlike恕齐,功能更加強(qiáng)大。所有的like匹配都可以被替換成rlike瞬逊。反之显歧,則不行。但是注意:like是從頭逐一字符匹配的确镊,是全部匹配士骤,但是rlike則不是,可以從任意部位匹配,而且不是全部匹配蕾域。
  2. NOT A LIKE B是LIKE的結(jié)果否定拷肌,如果like匹配結(jié)果時(shí)true到旦,則not…like的匹配結(jié)果時(shí)false,反之也是結(jié)果也是相對(duì)巨缘。實(shí)際中也可以使用 A NOT LIKE B添忘,也是LIKE的否定,與 NOT A LIKE B一樣若锁。當(dāng)然前提要排除出現(xiàn)null問(wèn)題搁骑,null值這個(gè)奇葩除外,null的結(jié)果都是null值又固。
  3. 同理NOT RLIKE 的使用仲器,也是NOT A RLIKE B是對(duì)RLIKE的否定。當(dāng)然前提要排除出現(xiàn)null問(wèn)題仰冠,null值這個(gè)奇葩除外乏冀,null的結(jié)果都是null值。

340. 統(tǒng)計(jì)字符串中字符的個(gè)數(shù)

  1. 用regexp_replace()函數(shù)將要計(jì)算的字符替換為’'
  2. 用字符串的總長(zhǎng)度減去替換字符后的串長(zhǎng)度沪停,得到要計(jì)算的字符總長(zhǎng)度
select (length("HELLO HELLO")) - (length(regexp_replace("HELLO HELLO","LL",'')))
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末煤辨,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子木张,更是在濱河造成了極大的恐慌众辨,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舷礼,死亡現(xiàn)場(chǎng)離奇詭異鹃彻,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)妻献,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)蛛株,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人育拨,你說(shuō)我怎么就攤上這事谨履。” “怎么了熬丧?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵笋粟,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我析蝴,道長(zhǎng)害捕,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任闷畸,我火速辦了婚禮尝盼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘佑菩。我一直安慰自己盾沫,他們只是感情好裁赠,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著疮跑,像睡著了一般组贺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上祖娘,一...
    開(kāi)封第一講書(shū)人閱讀 52,441評(píng)論 1 310
  • 那天失尖,我揣著相機(jī)與錄音,去河邊找鬼渐苏。 笑死掀潮,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的琼富。 我是一名探鬼主播仪吧,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼鞠眉!你這毒婦竟也來(lái)了薯鼠?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤械蹋,失蹤者是張志新(化名)和其女友劉穎出皇,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體哗戈,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡郊艘,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了唯咬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纱注。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖胆胰,靈堂內(nèi)的尸體忽然破棺而出狞贱,到底是詐尸還是另有隱情,我是刑警寧澤蜀涨,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布瞎嬉,位于F島的核電站,受9級(jí)特大地震影響勉盅,放射性物質(zhì)發(fā)生泄漏佑颇。R本人自食惡果不足惜顶掉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一草娜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧痒筒,春花似錦宰闰、人聲如沸茬贵。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)解藻。三九已至,卻和暖如春葡盗,著一層夾襖步出監(jiān)牢的瞬間螟左,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工觅够, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留胶背,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓喘先,卻偏偏與公主長(zhǎng)得像钳吟,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子窘拯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359