【问题标题】:function to display dates as YYYY-MMM将日期显示为 YYYY-MMM 的函数
【发布时间】:2013-11-25 15:58:12
【问题描述】:

正如标题所述,我正在尝试创建一个小函数来获取数据库中已有的日期值并将它们显示为 YYYY-MMM(例如:2013-Nov)。 SQL 服务器。我尝试了 DatePart,但一次只需要一部分争论(不能做 YYYY-MMM)。有什么建议将其作为一个函数使用?

Create function fnYearMonth
(@InputDate date)
returns date
Begin
Return DatePart(YYYY-MMM, @inputdate)
End;

Select hiredate, dbo.fnYearMonth(hiredate) as ReviewDate
from employees
Order by ReviewDate 

【问题讨论】:

  • returns date 必须进行更改才能使其正常工作 - 日期就是日期。它没有 格式。它只是存储自某个特定纪元日期以来发生了多少天的一些内部表示。

标签: sql sql-server user-defined-functions date-formatting scalar


【解决方案1】:

使用DATENAME

DECLARE @InputDate datetime
SELECT @InputDate = '2013-10-10 10:10:10'

DECLARE @output nvarchar(8);
SELECT @output = CAST(DatePart(YYYY, @InputDate) as nvarchar(4)) + '-' + CONVERT(nvarchar(3), datename(month, @InputDate))
SELECT @output;

结果:

2013 年 10 月

编辑:

Create function fnYearMonth
(@InputDate date)
returns nvarchar(8)
Begin
Return CAST(DatePart(YYYY, @InputDate) as nvarchar(4)) + '-' + CONVERT(nvarchar(3), datename(month, @InputDate))
End;  

【讨论】:

    【解决方案2】:

    使用DATENAME函数:

    Create function fnYearMonth
    (@InputDate date)
    returns VARCHAR(16)
    Begin
    Return CAST(YEAR(@InputDate) AS CHAR(4)) + ' '+ DATENAME ( month , @InputDate )
    End;
    

    或者

     CAST(YEAR(@InputDate) AS CHAR(4)) + ' '+ LEFT(DATENAME ( MONTH , @InputDate ),3)
    

    如果您不需要月份的全名。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-29
      • 2020-07-07
      • 1970-01-01
      相关资源
      最近更新 更多