【问题标题】:How to get year of character hijri date SQL Server如何获取字符回历日期 SQL Server 的年份
【发布时间】:2018-05-23 12:07:48
【问题描述】:

我搜索并尝试了许多无法解决我的回历日期的示例,

19/07/1440

我试过这个查询

 SELECT TOP 200   
     DATEPART(YEAR, EndDateHejri)
 FROM 
     student

但是我收到了这个错误

从字符串转换日期和/或时间时转换失败

我无法解决错误-希望您的建议

【问题讨论】:

  • 我们需要知道你的表的结构。
  • Student 表中EndDateHejri 列的数据类型是什么?
  • 它的类型是 nvarchar
  • 都是00/00/yyyy的格式吗?

标签: sql sql-server datetime sql-server-2012 datepart


【解决方案1】:

发布不同的答案。由于 OP 仅在年份部分之后,并且他们已经声明它始终采用 00/00/yyyy 格式,为什么不直接使用 RIGHT?所以:

SELECT RIGHT(EndDateHejri,4) as HejriYear;

【讨论】:

    【解决方案2】:

    我尝试回答 @Vishnu Chandel 它对我有用。

    SELECT DATEPART(YEAR,CONVERT(datetime2(0),convert(VARCHAR,EndDateHejri),103)) 
    

    完整的代码是:

    SELECT TOP 200   
       SELECT DATEPART(YEAR,CONVERT(datetime2(0),convert(VARCHAR,EndDateHejri),103)) as year
     FROM 
         student
    

    【讨论】:

      【解决方案3】:

      请尝试以下代码以获得正确的输出。

      SELECT DATEPART(YEAR,CONVERT(datetime2(0),convert(VARCHAR,EndDateHejri),103));
      

      【讨论】:

        【解决方案4】:

        我有点 Google-Fu 和格式 131 应该可以帮助您将回历日期转换为公历日期...

        DECLARE @hijri DATETIME = CONVERT(datetime, ' 7/05/1421 12:14:35:727PM', 131)
        
        SELECT @hijri
        

        不幸的是,所有的日期函数DATEPART()DATENAME(),甚至DATEADD(),等等)都是基于操纵公历日期。所以你不能使用它们。

        所以,你不得不使用字符串操作。

        DECLARE @hijri DATETIME = CONVERT(datetime, ' 7/05/1421 12:14:35:727PM', 131)
        
        SELECT @hijri
        
        SELECT DATEPART(year, @hijri)
        -- Gives 2000 :(
        
        SELECT RIGHT(CONVERT(VARCHAR(10), @hijri, 131), 4)
        -- Gives 1421 :)
        

        https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=901209ae0cdcf38cdcdea8afad4fd034

        【讨论】:

        • 我的第一个想法是正确的(...,4),但我不确定是否还有时间值 +1
        猜你喜欢
        • 1970-01-01
        • 2010-09-07
        • 1970-01-01
        • 1970-01-01
        • 2020-12-19
        • 1970-01-01
        • 1970-01-01
        • 2012-09-08
        • 2012-03-04
        相关资源
        最近更新 更多