【Oracle】一个SQL语法分析

一、源代码:

SELECT a.datatime, count(1) FROM (
SELECT TO_CHAR(d.datatime, 'yyyy-mm-dd hh24:mi') AS datatime
FROM DATA d WHERE 1 = 1
AND d.DATATIME > TO_DATE('2017-08-02', 'yyyy-mm-dd')
AND d.DATATIME < TO_DATE('2017-08-02 23:59', 'yyyy-mm-dd hh24:mi')
) a 
GROUP BY a.datatime
ORDER BY a.datatime;

二、解析:

①count(1)表示只统计查询表里的第一列;第一是方便,第二是快,只扫描第一列。如果用count(※)则会扫描所有列;第三点事:如果下面有null,count(1)则不计入统计这一项结果;但是如果是count(*)则会统计;(这里的※就是后面的星号,MarkDown两个星号会变斜体)
②TO_CHAR是把日期或者数字变成字符串,不能指定字符串长度;
使用TO_CHAR处理日期的格式为:
TO_CHAR(number,‘格式format’),例如,上面的例子中用到的:

TO_CHAR(d.datatime, 'yyyy-mm-dd hh24:mi')

③WHERE 1 = 1是全真条件,为了让后面的AND都能顺利执行,如果不是1=1这样的全真条件,AND就会直接跟到WHERE后面去,就会报错;
把number类型的时间变成格式化的CHAR;
④TO_DATE是把CHAR类型的时间,便是DATE类型;

TO_CHAR(d.datatime, 'yyyy-mm-dd hh24:mi')
  1. 这里的月份是mm,Mysql中是MM,注意区别;
  2. 这里需要注意的是,hh24表示24小时制;而Mysql中hh表示12小时制,HH表示24小时制;
  3. 这里的分钟,也不是Mysql中的mm,而是mi;

⑤这里的习惯是datatime小写的时间是CHAR格式的,DATATIME是时间格式的时间;
⑥GROUP BY a.datatime
表示分组,按照时间分组
⑦ORDER BY a.datatime;
表示排序,按照时间来排序;
⑧最重要的一点是:这里是嵌套语句,一个里面套另一个;分开来看就行;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陶洲川

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值