SQL中的DATENAME和DATEPART

时间:2015-01-12 19:37:46

标签: sql sql-server datepart

我试图以这种格式获取我的EntryDate专栏' YYYY_m'例如' 2013_04'。

此代码未成功

DATENAME (YYYY, EntryDate) + '_' + DATEPART (M, EntryDate) 

尝试使用DATEFORMAT也没有成功,说明语法错误,''在M.之后代码会起作用吗?

谢谢。

4 个答案:

答案 0 :(得分:1)

select DATENAME (YYYY, EntryDate) 
      + '_' 
      + right('0' + convert(varchar(2),datepart (MM, EntryDate)), 2)

您必须将DATEPART()的结果转换为字符串,以便+执行追加。

仅供参考 - 未来“不成功”并不意味着什么。下次发布您收到的实际错误。

答案 1 :(得分:1)

date_format()怎么样?

select date_format(EntryDate, '%&Y_%m')

这是MySQL方式。您的代码看起来像是尝试在SQL Server中执行此操作。

编辑:

以下内容适用于SQL Server:

select DATENAME(year, EntryDate) + '_' + RIGHT('00' + DATEPART(month, EntryDate), 2)

就个人而言,我可能会使用convert()

select replace(convert(varchar(7), EntryDate, 121), '-', '_')

答案 2 :(得分:0)

例如:

SELECT concat(EXTRACT(YEAR FROM '2015/1/1'), '_', 
         LPAD(extract(month from '2014/1/1'),2,'0')) AS OrderYear

这使用

  • concat to combine strings
  • lpad如果月份是一位数,则设置前导0
  • 并使用提取来挑选所需日期的部分。
工作小提琴 http://sqlfiddle.com/#!2/63b24/8

答案 3 :(得分:0)

DATEPART 它是一个Datetime函数,从日期中提取信息。此函数始终以整数类型返回结果。

SELECT DATEPART(month, '2009-01-01 00:00:00:000') as month
it is return "1" as an integer:

DATENAME 它也是另一个从日期提取信息的日期时间函数。此函数始终将结果返回为varchar

SELECT DATENAME(month, '2009-01-01 00:00:00:000')  as month
it is return "January".