【问题标题】:How to compare only year from a datetime field in sql server 2008?如何仅比较 sql server 2008 中日期时间字段的年份?
【发布时间】:2013-08-19 08:00:49
【问题描述】:

我有一个包含日期时间列的表,名为:

 TranDate

因此,我必须通过表查询以获取仅取决于年份的数据。所以, 我对如何做到这一点有点困惑。我当前的sql查询是:

 select * from Angkasa_UnpostedRecords 
 where year(convert(datetime,TranDate,103) = year(convert(datetime,@FromDate,103)

但是我在这方面遇到了错误。请建议我该怎么做。

谢谢。

【问题讨论】:

  • 错误是:“=”附近的语法不正确
  • 语法错误是因为你没有正确关闭括号。您在相等运算符的每一侧打开两个,但只关闭一个
  • 如果TranDate 是建议的datetime,那么您不需要convert - 只需year(TranDate) 就可以了
  • 非常感谢您让我明白这一点......它真的帮助我节省了时间......

标签: c# asp.net sql sql-server-2008


【解决方案1】:

语法错误是因为您没有正确关闭括号。您打开两个,但在相等运算符的每一侧只关闭一个

【讨论】:

    【解决方案2】:

    我认为你可以只使用年份部分

    select * from Angkasa_UnpostedRecords 
     where year(TranDate) = year(@FromDate)
    

    如果 TranDate 和 @FromDate 不是日期时间字段,则

    select * from Angkasa_UnpostedRecords 
     where year(convert(datetime,TranDate,103)) = year(convert(datetime,@FromDate,103))
    

    带有左括号和右括号。

    【讨论】:

      【解决方案3】:

      你缺少括号:

       select * from Angkasa_UnpostedRecords 
       where year(convert(datetime,TranDate,103)) = year(convert(datetime,@FromDate,103))
      

      注意每个 year( 函数末尾的额外括号

      【讨论】:

        【解决方案4】:

        试试这个

        select * from Angkasa_UnpostedRecords
        WHERE DATEDIFF(year, TranDate, @FromDate)=0
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-08
          • 2015-12-31
          • 2016-04-04
          • 1970-01-01
          • 2016-10-08
          • 1970-01-01
          相关资源
          最近更新 更多