1

我正在尝试以这种格式“YYYY_m”获取我的 EntryDate 列,例如“2013_04”。

此代码未成功

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

使用 DATEFORMAT 的尝试也没有成功,说明在 M 之后的 ',' 处存在语法错误。什么代码可以代替?

谢谢你。

4

4 回答 4

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

您必须将结果转换为DATEPART()字符串才能+执行追加。

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

于 2015-01-12T19:46:05.663 回答
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), '-', '_')
于 2015-01-12T19:46:32.970 回答
0

例如:

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

这使用

  • concat 组合字符串
  • 如果月份是一位数,lpad 放置前导 0
  • 并使用 extract 选择所需的日期部分。

工作小提琴 http://sqlfiddle.com/#!2/63b24/8

于 2015-01-12T19:45:58.273 回答
0

DATEPART 这是一个从日期中提取信息的日期时间函数。此函数始终以整数类型返回结果。

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". 
于 2017-11-13T10:22:21.440 回答