SQL日记4-datepart拆分时间

本文介绍如何通过SQL查询air_flight和air_flight_details表,筛选出2022年4月的航班信息,包括flight_id、出发地、目的地、价格,并利用datepart函数处理日期,以便于月份筛选。
摘要由CSDN通过智能技术生成

一.题目

最后结果要显示出 flight_id ;from_location; to_location; 航班出发时间为四月份的ticket price

二.思路

(1)首先观察要显示的结果都在哪些表中,就把那些表join 起来

from_location; to_location 都在air_flight中

price在air_flight_details里

航班出发时间(涉及到月的)是air_flight_details中的flight_departure_date

flight_id 是air_flight和air_flight_details的关联列

(2)先join起来,再细改

SELECT *

FROM air_flight af

JOIN air_flight_details afd ON af.flight_id=afd.flight_id

(3)join好后看条件

from_location         to_location           flight_id             price        这四个都好办

af.from_location    af.to_location     af.flight_id        afd.price                   对应就好

关键是“航班出发时间为四月份”怎么办?

date 数据类型是“yyyyy-mm-dd”

且题中条件全为模糊,between and 显然无从下手

此时需要用到datepart

先看一个简单的datepart例子明白它的含义用法(菜鸟教程-datepart)

 相当于把“2008-11-11”按年,月,日拆分成名为 

OrderYear     OrderMonth      OrderDay   这三个表格

按这个思路运用到这道题上来

我要求4月份的航班,就把flight_departure_date拆开,不过由于我只需要月份筛选,所以只拆一个月份表格就行了。

datepart(mm,afd.flight_departure_date) as month

这下就单独拆出一张月份列了,对这列进行筛选

WHERE datepart(mm,afd.flight_departure_date) =4

注意几个细节:

1.datepart返回值为int 类型

2.mm,m,month 都是月,都可以用

3.04=4,mm与m是同样的,不区分几位数,写04也可以,不要加‘04’这种单引号,因为是int

三.综上

SELECT  af.flight_id, afd.price, af.from_location, af.to_location, 

datepart(mm,afd.flight_departure_date) as month

FROM air_flight af

JOIN air_flight_details afd ON af.flight_id=afd.flight_id

WHERE datepart(mm,afd.flight_departure_date)=4

ORDER BY af.flight_id,af.from_location;

注意的细节:
1.WHERE datepart(mm,afd.flight_departure_date)=4   这里不能写成

WHERE month =4 

因为优先级的问题

sql执行顺序优先级由高到低依次是:

1.from关键字后面的语句

2.where关键字后面的语句

3.group by后面的语句

4.select后面的语句

5.order by后面的语句。

直接写WHERE month =4 ,SQL不知道month是什么东西

所以要WHERE datepart(mm,afd.flight_departure_date)=4 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值