【问题标题】:Getting only Month and Year from SQL DATE从 SQL DATE 仅获取月份和年份
【发布时间】:2010-12-19 09:52:12
【问题描述】:

我只需要从 SQL Server 中的日期字段访问 Month.Year。

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:
    SELECT * FROM demo 
        WHERE attendance_year_month < SUBSTRING(CURRENT_TIMESTAMP,1,11) 
              AND
              attendance_year_month >= DATE_SUB(SUBSTRING(CURRENT_TIMESTAMP,1,11), INTERVAL 6 MONTH)
    

    【讨论】:

      【解决方案2】:
      select CONCAT(MONTH(GETDATE()),'.',YEAR(GETDATE()))
      Output: **5.2020**
      
      select CONCAT(DATENAME(MONTH , GETDATE()),'.',YEAR(GETDATE()))
      Output: **May.2020**
      

      【讨论】:

        【解决方案3】:

        出于报告目的,我倾向于使用

        CONCAT(YEAR([DateColumn]), RIGHT(CONCAT('00', MONTH([DateColumn])), 2))
        

        您将丢失日期类型,因为它将返回 (n)varchar。但如果前导零,该列是可排序的(例如“202112”>“202102”)。您还可以在年份和月份之间添加分隔符,例如

        CONCAT(YEAR([DateColumn]), '-', RIGHT(CONCAT('00', MONTH([DateColumn])), 2))
        

        返回一些像“2020-08”这样的想法(仍然可以排序)。

        【讨论】:

          【解决方案4】:

          另一个简单的答案是从日期中删除天数

          如何在 BigQuery 中进行操作

          SELECT DATE_ADD(<date_field>, INTERVAL 1 - extract(day from <date_field>) DAY) as year_month_date
          

          一个例子:

          SELECT DATE_ADD(date '2021-03-25', INTERVAL 1 - extract(day from date '2021-03-25') DAY) as year_month_date
          

          这个返回2021-03-01

          【讨论】:

            【解决方案5】:

            试试SELECT CONCAT(month(datefield), '.', year(datefield)) FROM YOURTABLE;

            【讨论】:

              【解决方案6】:

              我有一个特定的要求来做类似的事情,它会显示月份年份,这可以通过以下方式完成:

              SELECT DATENAME(month, GETDATE()) + '-' + CAST(YEAR(GETDATE()) AS nvarchar) AS 'Month-Year'

              在我的特定情况下,我需要将其简化为 3 个字母的月份缩写和 2 位数的年份,如下所示: SELECT LEFT(DATENAME(month, GETDATE()), 3) + '-' + CAST(RIGHT(YEAR(GETDATE()),2) AS nvarchar(2)) AS 'Month-Year'

              【讨论】:

                【解决方案7】:

                试试这个:

                葡萄牙语

                SELECT format(dateadd(month, 0, getdate()), 'MMMM', 'pt-pt') + ' ' + convert(varchar(10),year(getdate()),100)
                

                结果: maio 2019


                英语

                SELECT format(dateadd(month, 0, getdate()), 'MMMM', 'en-US') + ' ' + convert(varchar(10),year(getdate()),100)
                

                结果: 2019 年 5 月

                如果您想使用其他语言,请将“pt-pt”或“en-US”更改为link中的任何一个@

                【讨论】:

                  【解决方案8】:
                  CONCAT (datepart (yy,DATE), FORMAT (DATE,'MM')) 
                  

                  如果你想要一个六位数的结果,会给你例如 201601

                  【讨论】:

                    【解决方案9】:
                    select convert(varchar(11), transfer_date, 106) 
                    

                    得到我想要的日期格式为 2018 年 3 月 7 日的结果

                    我的列“transfer_date”是一个日期时间类型列,我在 azure 上使用 SQL Server 2017

                    【讨论】:

                      【解决方案10】:

                      对于结果:“YYYY-MM”

                      SELECT cast(YEAR(<DateColumn>) as varchar) + '-' + cast(Month(<DateColumn>) as varchar)
                      

                      【讨论】:

                        【解决方案11】:

                        查询:- Select datename(m,GETDATE())+'-'+cast(datepart(yyyy,GETDATE()) as varchar) as FieldName

                        输出:- 2019 年 1 月

                        我们可以使用的一般日期字段

                        datename(m,<DateField>)+' '+cast(datepart(yyyy,<DateField>) as varchar) as FieldName
                        

                        【讨论】:

                          【解决方案12】:
                          SELECT REPLACE(RIGHT(CONVERT(VARCHAR(11), GETDATE(), 106), 8), ' ', '-')
                          

                          输出:2019 年 3 月

                          【讨论】:

                            【解决方案13】:

                            从日期获取月份和年份

                            DECLARE @lcMonth nvarchar(10)
                            DECLARE @lcYear nvarchar(10)
                            
                            SET @lcYear=(SELECT  DATEPART(YEAR,@Date))
                            SET @lcMonth=(SELECT  DATEPART(MONTH,@Date))
                            

                            【讨论】:

                              【解决方案14】:

                              MS ACCESSRODBC 等一些数据库可能不支持SQL SERVER 函数,但对于任何具有FORMAT 函数的数据库,您都可以这样做:

                              SELECT FORMAT(<your-date-field>,"YYYY-MM") AS year-date FROM <your-table>
                              

                              【讨论】:

                              • 没错,最简单的解决方案:选择 FORMAT(getdate(), 'MMyyyy')
                              【解决方案15】:
                              SELECT convert(varchar(7), getdate(), 126) 
                              

                              你可能想看看这个网站: http://anubhavg.wordpress.com/2009/06/11/how-to-format-datetime-date-in-sql-server-2005/

                              【讨论】:

                              • @RuelosJoel varchar(6) 会将“2021-03”截断为“2021-0”
                              【解决方案16】:

                              有两个 SQL 函数可以做到这一点:

                              有关详细信息,请参阅链接文档。

                              【讨论】:

                              • 我建议至少举一些简短的例子,因为链接并不总是永远存在......事实上它们已经不好了。
                              【解决方案17】:

                              我的数据库不支持上面的大部分功能,但是我发现这是可行的:

                              SELECT * FROM table WHERE SUBSTR(datetime_column, starting_position, number_of_strings)=required_year_and_month;

                              例如: SELECT SUBSTR(created, 1,7) FROM table;

                              以“yyyy-mm”格式返回年份和月份

                              【讨论】:

                                【解决方案18】:

                                让我们这样写:YEAR(anySqlDate)MONTH(anySqlDate)。以YEAR(GETDATE()) 为例。

                                【讨论】:

                                  【解决方案19】:

                                  试试这个

                                  select to_char(DATEFIELD,'MON') from YOUR_TABLE
                                  

                                  例如。

                                  select to_char(sysdate, 'MON') from dual
                                  

                                  【讨论】:

                                    【解决方案20】:

                                    这也很有帮助。

                                    SELECT YEAR(0), MONTH(0), DAY(0);
                                    

                                    SELECT YEAR(getdate()), MONTH(getdate()), DAY(getdate());
                                    

                                    SELECT YEAR(yourDateField), MONTH(yourDateField), DAY(yourDateField);
                                    

                                    【讨论】:

                                    • 无论如何不删除返回字段中的“0”?
                                    【解决方案21】:
                                    RIGHT(CONVERT(VARCHAR(10), reg_dte, 105), 7) 
                                    

                                    【讨论】:

                                      【解决方案22】:
                                      datename(m,column)+' '+cast(datepart(yyyy,column) as varchar) as MonthYear
                                      

                                      输出将如下所示:'December 2013'

                                      【讨论】:

                                        【解决方案23】:
                                        convert(varchar(7), <date_field>, 120)
                                        because 120 results in 'yyyy-MM-dd' which is varchar(10)
                                        using varchar(7) will display only year and month
                                        
                                        example:
                                        select convert(varchar(7), <date_field>, 120), COUNT(*)
                                        from <some_table>
                                        group by convert(varchar(7), <date_field>, 120)
                                        order by 1
                                        

                                        【讨论】:

                                          【解决方案24】:

                                          除了已经给出的建议之外,我还可以从您的问题中推断出另一种可能性:
                                          - 你仍然希望结果是一个日期
                                          - 但您想“丢弃”日期、时间等
                                          - 只留下年/月日期字段

                                          SELECT
                                             DATEADD(MONTH, DATEDIFF(MONTH, 0, <dateField>), 0) AS [year_month_date_field]
                                          FROM
                                             <your_table>
                                          

                                          这会从基准日期 (0) 获取整月数,然后将它们添加到该基准日期。因此向下舍入到日期所在的月份。

                                          注意:在 SQL Server 2008 中,您仍会将 TIME 附加为 00:00:00.000 这与完全“删除”任何日期和时间符号并不完全相同。 也将 DAY 设置为第一个。例如2009-10-01 00:00:00.000

                                          【讨论】:

                                          • 这对我来说根本不起作用。结果是 2023-02-01 00:00:00.000。
                                          • @dss - 有什么参数?显示实际的 SQL,我很乐意看看。
                                          • @MatBailie SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, LastSaleDate), 0) AS [year_month_date_field] FROM db1.products where productID = 123 “LastSaleDate”列声明为“(datetime,不为空)”,我得到:2014-09-01 00:00:00.000
                                          • @DSS - 是的,这似乎是正确的。它四舍五入到 2014 年 9 月开始。没有“仅限年和月”数据类型,因此使用每个月的第一刻是标准做法。将此 DATETIME 值转换为字符串(应用层、表示层、报告层等)时,您始终可以选择仅使用年份和月份部分对其进行格式化。但就“数据库中”数据操作而言,这是正确的。
                                          • 我想可能是因为您的答案是要与“日期”字段一起使用,但我使用的是“日期时间”字段,所以这可能是问题所在。
                                          【解决方案25】:

                                          我以两种方式解释您的问题。

                                          a) 您只需要单独的月份和年份,在这种情况下,这就是答案

                                          select 
                                                  [YEAR] = YEAR(getdate())
                                                  ,[YEAR] = DATEPART(YY,getdate())
                                                  , [MONTH] = month(getdate())
                                                  ,[MONTH] = DATEPART(mm,getdate())
                                                  ,[MONTH NAME] = DATENAME(mm, getdate()) 
                                          

                                          b)

                                          您想以 MONTH.YEAR 格式显示给定日期的'2009-11-24 09:01:55.483'。所以在这种情况下,输出应该是11.2009

                                          如果应该是这种情况,那么试试这个(以及其他选择)

                                          select [Month.Year] = STUFF(CONVERT(varchar(10), GETDATE(),104),1,3,'')
                                          

                                          【讨论】:

                                            【解决方案26】:
                                            SELECT DATEPART(yy, DateVal)
                                            SELECT DATEPART(MM, DateVal)
                                            SELECT DATENAME(MM, DateVal)
                                            

                                            【讨论】:

                                            • SELECT DATEPART(MM, DateVal) 未返回“MM”。如果月份在 1-9 之间,它只会返回一位数。
                                            • 应该说“月”而不是“MM”:'SELECT DATEPART(month, getdate())'
                                            【解决方案27】:
                                            select month(dateField), year(dateField)
                                            

                                            【讨论】:

                                            • 太棒了!您可以将它们连接到一列:'select cast(month(dateField) as varchar) + '。' + cast(year(dateField) as varchar)'
                                            猜你喜欢
                                            • 1970-01-01
                                            • 1970-01-01
                                            • 1970-01-01
                                            • 1970-01-01
                                            • 1970-01-01
                                            • 2016-08-10
                                            • 1970-01-01
                                            • 1970-01-01
                                            • 1970-01-01
                                            相关资源
                                            最近更新 更多