sqlserver截取日期的年份和月份

sqlserver截取日期的年份和月份,第1张

sqlserver 截取日期年份和月份使用datepart函数,函数使用方法如下:

一、函数功能:DATEPART() 函数用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等。

二、语法:DATEPART(datepart,date)

三、参数说明:date 参数是合法的日期表达式。datepart 参数可以是下列的值:

四、实例

1、截取年份:datepart(yy,'2017-1-1') 返回:2017

2、截取月份:datepart(mm,'2017-1-1') 返回:1

五、datepart函数返回的是整型数值,如果需要返回字符型,那么使用datename()函数,用法与datepart相同,只是返回数据类型不同。

1、通常情况下,Like主要用在字符类型的查询中,不会用在日期类型中。即使要用在日期类型中,也是先转换成字符型再用like。用不用like关键看你的查询需求。

2、一般情况下,查询月份都带上年份,不然搞不清是哪一年的。

3、为了查询效率,一般尽可能左边直接用字段。

所以:

select

from

[表名]

where

[字段名]

between

to_date('20080801','yyyymmdd')

and

to_date('20080831','yyyymmdd')

要比

select

from

[表名]

where

to_char([字段名],'yyyymm')

=

'200808'

--

或者:to_char([字段名],'yyyymmdd')

like

'200808%'

效率高很多。

麻烦在于假设一个月一条也没有的情况,最好是先构造月,由此避免这种现象

select convert(varchar(6),日期,112),count(col) from table group by convert(varchar(6),日期,112)

或者构造月实现(以2013年为例)

select amon,count(bcol) from

(

SELECT '201301' AS mon

UNION ALL

SELECT '201302' AS mon

UNION ALL

SELECT '201303' AS mon

UNION ALL

SELECT '201304' AS mon

UNION ALL

SELECT '201305' AS mon

UNION ALL

SELECT '201306' AS mon

UNION ALL

SELECT '201307' AS mon

UNION ALL

SELECT '201308' AS mon

UNION ALL

SELECT '201309' AS mon) a left join table b on amon=convert(varchar(6),日期,112)

group by amon

1、查询确定年月的数据,使用to_date或to_char都可以实现

SELECT FROM 表名

WHERE TO_CHAR(日期列,'YYYY-MM') = TO_CHAR('2013-06','YYYY-MM') 或者

SELECT FROM 表名

WHERE 日期列 = TO_Date('2013-06','YYYY-MM')

2、查询前一个月

select concat(to_char(sysdate,'yyyy')||to_char(add_months(sysdate,-1), '-MM-'),'01 00:00:00')start_time,

concat(to_char(sysdate,'yyyy')||to_char(add_months(sysdate,-1), '-MM-')||to_char(LAST_DAY(sysdate),'dd '),'23:59:59') end_time from dual

3、查询前一天

select to_char(sysdate-1,'yyyy-mm-dd ')||'00:00:00' start_time,to_char(sysdate-1,'yyyy-mm-dd ')||'23:59:59' end_time from dual

select from table where 日期 between to_date('2015-3-1','yyyy-MM-dd') and to_date('2010-4-1','yyyy-MM-dd')

楼上的只统计了一个月的吧

WITH t AS

     (SELECT     ROWNUM

            FROM DUAL

      CONNECT BY ROWNUM <= 12)

SELECT    TO_CHAR (LAST_DAY (TO_DATE (   TO_CHAR (SYSDATE, 'YYYY')

                                      || LPAD (TO_CHAR (ROWNUM), 2, 0),

                                      'YYYYMM'

                                     )

                            ),

                   'YYYY-MM'

                  )

       || '月',

          TO_CHAR (LAST_DAY (TO_DATE (   TO_CHAR (SYSDATE, 'YYYY')

                                      || LPAD (TO_CHAR (ROWNUM), 2, 0),

                                      'YYYYMM'

                                     )

                            ),

                   'DD'

                  )

       || '天'

  FROM t

直接全选复制粘贴运行

以上就是关于sqlserver截取日期的年份和月份全部的内容,包括:sqlserver截取日期的年份和月份、如何用Slect语句在Oracle数据库中查出具体某个月(年)的数据、数据库如何查询每月的数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9818290.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存