Sql 语言常用函数

时间函数

date_format (date,format)

  1. date_format 函数用于以不同的格式显示日期/时间数据,即用来转化时间格式
  2. 可以提取对应的日期/时间的参数来进行统计
  3. date 参数是合法的日期或者日期时间,format规定日期/时间的输出格式
  • 一般格式∶date_format (payDate,'%Y-%m-%d')
  1. 显示订单创建时间到 day
  2. 提取对应的日期/时间的参数来进行统计
-- 提取订单创建时间,只显示年月日
select date_format(create_time,'%y-%m-%d') as dday
from db_order.sn_order_20210412;
-- 对比
select create_time
from db_order.sn_order_20210412;
-- 以小时为时间维度,统计2017年销售金额在不同时间段的分布情况 %H/%h
select date_format(create_time,'%H') as hour1
      ,date_format(create_time,'%h') as hour2
      ,sum(order_money)
from db_order.sn_order_20210412
group by hour1
        ,hour2;
-- 统计每天的销售金额 %j:显示一年中的第几天
select date_format(create_time,'%j') as dday
      ,sum(order_money) 
from db_order.sn_order_20210412
group by dday;
-- 以星期为时间维度,统计2017年销售金额周一到周日的分布情况 %W/%w 
select date_format(create_time,'%W') as week1
      ,date_format(create_time,'%w') as week2
      ,sum(order_money) 
from db_order.sn_order_20210412
group by week1
        ,week2;
-- 统计每个月的销售金额 %M/%m
select date_format(create_time,'%M') as month1
      ,date_format(create_time,'%m') as month2
      ,sum(order_money) 
from db_order.sn_order_20210412
group by month1
        ,month2;

时间函数的常用时间格式(自查用):

常用时间函数

注意事项: 

  • 注意dayofweek和weekday的区别:
  1. 开始时间不一样,两个函数计算的数字各不一样
  2. weekday:0-6   0是周一,6是周日
  3. dayofweek:1-7 1是周日,7是周六
select weekday('20210508') as day1
      ,dayofweek('20210508') as day2; 

时间的加减

date_add:

  1.  用于日期的增减,可以用任意的粒度去描述
  2. 从年到秒,如果要相减的常量有小数,会自动进行四舍五入,然后再相减 

datediff() :返回相差的天数;   

timediff() :返回时、分、秒格式

注意:大的日期/时间需要在第一个位置位置,则返回正数,否则返回负数

str_to_date: 需要固定格式 0000-00-00,%Y-%m-%d 否则返回为空

select create_time  
      ,date_add(create_time,interval 3 day) as day3
      ,date_add(create_time,interval 3 hour) as hour3
      ,date_add(create_time,interval -3 hour) as hour_3
      ,date_add(create_time,interval -3.2 hour) as hour__3
      ,date_add(create_time,interval -3.6 hour) as hour_4 
from db_order.sn_order_20210412;

select datediff('20210501','20210508') as date1;
select timediff('14:05:30','17:28:50') as time1;

select ('2021-05-08') as day0
      ,str_to_date('2021-05-08','%y-%m-%d') as day1
      ,str_to_date('2021-05-08','%Y-%m-%d') as day2
      ,str_to_date('2021-05-08','%Y-%M-%D') as day3
      ,str_to_date('21-05-08','%Y-%M-%D') as day4;

字符函数

-- length 读取字符长度
select id 
      ,length(id) as l_id
from db_order.sn_order_20210412;
-- left 截取字符长度,从左边开始,截取id的前三个字符
select id
      ,left(id,3) 
from db_order.sn_order_20210412;
-- substring:返回的是,从你指定位置开始的字符串
 /* 第二个参数:是指开始截取的位置
 * 第三个参数(可选):如果第三个参数没有指定,则说明从第二个参数开始到最后,如果指定,则就是指定相应的长度
 */
select id 
      ,substring(id,2,1) as id_1
      ,substring(id,2,3) as id_3 
from db_order.sn_order_20210412;
-- concat 拼接函数,SQL没有%形式,如果数据需要带%可以使用拼接函数
select concat(3,'%');
-- position('N' in  ) 位置函数 /查找第一次出现2的位置
select id
      ,position('2' in id) as 2_frist
from db_order.sn_order_20210412;
-- 从2开始,往后截取3位
select id 
      ,substring(id,position('2' in id),3) 
from db_order.sn_order_20210412;

数字函数

  • truncate:必须带小数的参数,要不然会报错
  • ceiling:向上取整,返回不小于自身的整数 
  1. 运用函数取值,比较函数之间的差异
  2. 如果订单金额大于50则满足抽奖条件,随机抽取2名作为得奖   rand
-- 取值
select order_money 
      ,round(order_money) as r_1         /*会进行四舍五入*/
      ,round(order_money,1) as r_11      /*只截取数据,不进行四舍五入,但一定要有Y*/
      ,truncate(order_money,0)as r_2
      ,truncate(order_money,1) as r_21
      ,ceiling(order_money) as c_1       /*向上取整*/
from db_order.sn_order_20210412;

/*
 * 如果订单金额大于50则满足抽奖条件,随机抽取2名作为得奖
 *1、用随机函数 rand 构建得奖名单
 *2、rand(N) 加入种子,可以让每次运行的结果保持不变,N为任意值
 * */
select id 
      ,order_money 
      ,member_id 
      ,rand() as r1
      ,rand(200) as r2
from db_order.sn_order_20210412
where order_money > 50
order by rand(200) desc
limit 2;

控制函数

 控制函数 case when then end /  if

  •  case when
  1.  case 开始,end 结束;
  2.  when 可以有多条,根据你的条件判断内容
  3.  else 不是必须的,可选—when 中各种情况 下一条件 之外概括 (除此之外)
  •  if
  1. if 如果某个条件成立,则选择第二个参数;可以嵌套使用
  2. 用 if 嵌套实现 case when 的内容,分成高、中、低
-- 对客单价进行划分,分成高中低三个档次
-- case 
select id 
      ,order_money 
      ,case when order_money <= 50 then '低'
            when order_money >50 and order_money <=100 then '中'
            else '高'
       end as type_1
      ,case when order_money <= 50 then '低'
            when order_money >50 and order_money <=100 then '中'
            when order_money >100 then '高'
            else '其他'
       end as type_2
from db_order.sn_order_20210412;
-- 统计高、中、低(按客单价进行划分)三个档次中的 订单量 销售金额 (去除空值)
select case when order_money <= 50 then '低'
            when order_money >50 and order_money <=100 then '中'
            else '高'
       end as type_1
      ,count(distinct member_id)
      ,sum(order_money) 
from db_order.sn_order_20210412
where order_money is not null                   /*去除空值*/
group by type_1;
-- if 
select id 
      ,order_money 
      ,if(order_money>200,'high','low') as type1
from db_order.sn_order_20210412;
-- 用 if 嵌套实现 case when 的内容,分成高、中、低 Tip:需要从处于中间的数值入手
select id 
      ,order_money 
      ,case when order_money <= 50 then '低'
            when order_money >50 and order_money <=100 then '中'
            else '高'
       end as type_1
      ,if (order_money<=100,if(order_money>50,'中','低'),'高') as type_2
from db_order.sn_order_20210412;

传送门:SQL基础语句—增删查改

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、 概念介绍: 数据库DATABASE、表TABLE、列COLUMN、行ROW、关键字PRIMARY KEY、索引INDEX 二、 数据类型: LONG RAM:超长大型数据(照片、图形、描述等不定长数据)。 DATE:包含日期和时间。 INTEGER:有符号全长二进制整数(31位精度)。 SMALLINT:有符号半长二进制整数(15位精度)。 DECIMAL (p[,q]): 有符号的封装了的十进制小数,最多有 p 位数,并假设有 q 位在小数点右边。 如果省略 q ,则认为是 0。 FLOAT:有符号双字浮点数。 CHAR(n): 长度为 n 的定长字符串。 VARCHAR(n): 最大长度为 n 的变长字符串。 CHAR (5) 和 VARCHAR2(5)的区别是 CHAR不足5位后面自动加上空格,VARCHAR2不加 三、 列的非空属性NOT NULL: 如果一个列具有非空属性,则在给该表增加、修改数据时必须保证该列有内容,否则会出错。 如果一个列允许为空,该列可以不放任何内容,即空值(在SQL中书写为NULL),空值不是空格。 如果一个列内容为空值,则该列不等于任何值(包括空值)。 例如:列SAGE1、SAGE2的内容为空,列SAGE3内容为20,则下面的逻辑表达式全部为NULL:SAGE1=SAGE2、SAGE1SAGE2、SAGE1=SAGE3、SAGE3>SAGE1。下面的逻辑表达式全部为真:SAGE1 IS NULL、SAGE3 IS NOT NULL。下列表达式全为空:sage1+100,sage2+sage3 四、 特殊约定: 1. 所有SQL语句以分号结束不是以回车换行结束。 2. 中扩号代表选项,就是其中的内容可有可无。 3. 下面讲的列名在很多情况下也可以是表达式。 4. 表名格式:[用户名.]表名,例如:user001.student,如果不注名用户,则说明是当前登陆的用户的表。 五、 建表或视图语句CREATE 格式: CREATE TABLE 表名 (列名 类型 长度 [NOT NULL], 列名 类型 长度 [NOT NULL], 列名 类型 长度 [NOT NULL], 列名 类型 长度 [NOT NULL], 列名 类型 长度 [NOT NULL]); CREATE VIEW 视图名 AS SELECT ……; CREATE TABLE 表名 AS SELECT ……; Create table as 经常在修改一个表前备份该表,而且运行速度很快且不用提交 例如:Select table a_student as select * from student; Create table as 还可以用来复制表结构 例如:假设有三个表
SQL Server中提供了许多内置函数常用的内置函数包括字符串函数、日期函数、数学函数和转换函数。这些函数可以在查询操作中使用,为查询带来很多方便。\[1\]在Transact-SQL语言中,函数被用来执行一些特殊的运算以支持SQL Server的标准命令。每个函数都有一个名称,名称后面跟着一对小括号,如GETDATE()。大部分函数在小括号中需要一个或多个参数。\[2\]一些常用的数学函数包括:abs()用于取绝对值、ceiling()用于向上取整、floor()用于向下取整、round()用于四舍五入、power()用于求幂、sign()用于判断正负数或者是0、sqrt()用于取平方根。\[3\]此外,还有一些转换函数可用于将数据类型转换为其他类型,如CAST()和CONVERT()函数。 #### 引用[.reference_title] - *1* *3* [04.SQL Server(内置函数)](https://blog.csdn.net/zengweidong0813/article/details/121632081)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [sqlserver内置函数大全,概念以及部分测试案例](https://blog.csdn.net/chenggong9527/article/details/123864857)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值