【问题标题】:Get Month value from DateTime从 DateTime 获取月份值
【发布时间】:2014-01-14 23:35:37
【问题描述】:

使用 SQL Server Management Studio。只想从列中提取月份。已尝试以下方法:

尝试 1:

,Convert (CHAR, e.TERM_DATE, 110) AS [Due Date]
            ,PAT_CASE.OLD_CASE_ID AS [Case Number]
            ,CASE
                       WHEN e.TERM_DATE = 'MM-DD-YYYY' 
                       THEN DateName(MONTH, GETDATE())    
                       ELSE e.TERM_DATE 
                       END AS [MONTH]

错误信息:

消息 241,第 16 级,状态 1,第 1 行
从字符串转换日期和/或时间时转换失败。

尝试 2:

,Convert (CHAR, e.TERM_DATE, 110) AS [Due Date]
            ,PAT_CASE.OLD_CASE_ID AS [Case Number]
            ,CASE
                       WHEN e.TERM_DATE = 'MM-DD-YYYY' 
                       THEN DateName( month , DateAdd( month , @MonthNumber , -1 ))    
                       ELSE e.TERM_DATE 
                       END AS [MONTH]

错误消息:

消息 137,第 15 级,状态 2,第 6 行
必须声明标量变量“@MonthNumber”。
消息 156,第 15 级,状态 1,第 55 行
关键字“AND”附近的语法不正确。

尝试 3:

,Convert (CHAR, e.TERM_DATE, 110) AS [Due Date]
            ,PAT_CASE.OLD_CASE_ID AS [Case Number]
            ,CASE
                       WHEN e.TERM_DATE = 'MM-DD-YYYY' 
                       THEN SUBSTRING('JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC ', (@intMonth * 4) - 3, 3)   
                       ELSE e.TERM_DATE 
                       END AS [MONTH]

错误消息:

消息 137,第 15 级,状态 2,第 6 行
必须声明标量变量“@intMonth”。
消息 156,第 15 级,状态 1,第 55 行
关键字“AND”附近的语法不正确。

【问题讨论】:

  • 假设TERM_DATE确实在日期时间列,你有没有试过最明显的:MONTH(TERM_DATE)如果它是你想要的月份数?
  • 是并收到错误:从字符串转换日期和/或时间时转换失败。

标签: sql sql-server


【解决方案1】:

您的CAST 以及第一个示例中的WHEN e.TERM_DATE = 'MM-DD-YYYY' 错误意味着e.TERM_DATEDATETIME 所以:

SELECT DATENAME(MONTH, e.TERM_DATE)

【讨论】:

  • 谢谢,成功了。
猜你喜欢
  • 2010-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-09
  • 1970-01-01
  • 1970-01-01
  • 2012-01-02
  • 2011-03-12
相关资源
最近更新 更多