【问题标题】:Can't convert month number to name无法将月份数字转换为名称
【发布时间】:2019-04-26 18:12:41
【问题描述】:

我有以下 SQL 行:

SELECT CONCAT(CONCAT(MONTH('YEAR-MM-01'), CONCAT(' ', YEAR('YEAR-MM-01'))), '  |  ') AS period;

它返回例如3 2019。我希望将 3 替换为 March

欢迎任何帮助。

【问题讨论】:

  • 您的问题与您的示例代码有什么关系?
  • 有没有办法修改这个并将月份作为名称而不是数字返回?
  • 不知道您的示例代码应该代表什么。但如果你有实际的日期时间,你可以使用DATENAME 来获取日期部分的名称。

标签: sql sql-server tsql date


【解决方案1】:

只是因为没有人提到format()

需要明确的是,format() 有一些很棒的功能,但性能可能会受到影响。应该谨慎使用

示例

Select format(GetDate(),'MMMM, yyyy | ')

退货

April, 2019 | 

【讨论】:

  • 感谢您的提示,对您有用!
【解决方案2】:

使用这样的东西:

select 
    concat(
        datename(month, getdate()),
        ' ',
        year(getdate()),
        ' | '
    ) as period

如果您的输出曾经是 3 2019 |,您的查询将如下所示以获取 March 2019 |

select 
    concat(
        datename(month, cast('2019-03-01' as date)),
        ' ',
        year(cast('2019-03-01' as date)),
        ' | '
    ) as period

【讨论】:

  • @sterrek 。 . .这和你的问题有什么关系?你有一个'3 2019'的示例字符串,它与getdate()确实无关。
【解决方案3】:

使用

datename(month, '2000/01/02')

可以获取月份名称:

select  concat(concat(datename(month,'YEAR-MM-01'),concat(' ',year('YEAR-MM-01'))),'  |  ') as period;

【讨论】:

    【解决方案4】:

    这适用于您的示例:

    select datename(month, cast(replace('1 ' + v.str, ' ', '-') as date)) + right(str, 5)
    from (values ('3 2019')) v(str)
    

    【讨论】:

      【解决方案5】:

      只需使用FORMAT 函数格式化日期/日期时间值:

      SELECT FORMAT(GETDATE(), 'MMMM yyyy')
      

      格式说明符的完整列表是available here

      【讨论】:

        【解决方案6】:

        改为使用 DATENAME 来获取月份的名称。

        SELECT CONCAT(DATENAME(mm,'YEAR-MM-01'), ' ', YEAR('YEAR-MM-01'))

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-08-07
          • 1970-01-01
          • 2011-03-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-04
          相关资源
          最近更新 更多