【问题标题】:converting date format to yyyy-mm-dd sql server c#将日期格式转换为 yyyy-mm-dd sql server c#
【发布时间】:2017-07-04 06:34:28
【问题描述】:

我正在创建一个网络应用程序,我想在其中将日期格式转换为yyyy-mm-dd

目前我正在获取以下格式的日期Saturday, July 1, 2017

这是我的完整选择查询

SELECT 
    ROW_NUMBER() OVER (ORDER BY D.D_ID ) AS SL,
    D.D_DATE, D.USER_TP, D_ITEM_TYPE,D_AUTH_REF,D.D_ID, D.SUR_REFNO, D.REF_NO_DT,
    M.PART_NO,
    S.D_NAME,
    PART_DESC, DENOM, QTY_DEM, STORE_TYPE, ITEM_TYPE, EQUIPMENT,D_NO
FROM SURVEY_HDR D, DEMAND_STATUS S, STORE_MASTER M
WHERE 
    M.STORE_ID=D.PART_NO_ID
    AND S.D_ID=D.D_STATUS 
    AND D_DATE >= CONVERT(VarChar, 'Saturday, July 1, 2017',1)
    AND D_DATE <= CONVERT(VarChar, 'Monday, July 31, 2017',1)
ORDER BY D.D_ID

但我收到以下错误

Msg 241, Level 16, State 1, Line 3 转换时转换失败 字符串中的日期和/或时间。

注意

D_DATE 为日期格式,日期存储为'2011-01-01'

如何转换日期?

【问题讨论】:

    标签: c# sql-server date datetime


    【解决方案1】:

    您的字符串无法识别为日期。试试这个:

    declare @mydate varchar(22) = 'Saturday, July 1, 2017'
    select cast(substring(@mydate,charindex(',',@mydate)+2,22)as date)
    

    【讨论】:

    • 我猜,LEN(@mydate) 不是将长度硬编码为 22,而是很好。
    • @Arulkumar 或 len(@mydate)-charindex(',',@mydate)-1 如果你想要正确的长度。但是 22 工作正常,我想它会快 1 毫秒。
    【解决方案2】:

    为什么要在 sql 中转换日期?您可以将其作为日期时间返回,然后使用toString 在您的网页中格式化

    然后在c#中你可以使用:

      YourDateVar.ToString("yyyy-MM-dd");
    

    【讨论】:

      【解决方案3】:

      您正在将字符串转换为日期,但首先您必须在日期中对其进行解析,而不是根据需要对其进行格式化:
      示例:
      1) 解析字符串到日期:

      DateTime _date;
      string strDate = "";
      _date = DateTime.Parse("dddd, MMMM dd, yyyy"); // Saturday, July 1, 2017
      

      2) 现在将此日期转换为您想要的格式:

      strDate = _date.ToString("yyyy-mm-dd"); // YOUR CASE
      
      strDate = _date.ToString("MM/dd/yyyy");   // 07/21/2017 
      strDate = _date.ToString("dddd, dd MMMM yyyy");   //Saturday, 21 July 2017
      strDate = _date.ToString("dddd, dd MMMM yyyy HH:mm"); // Saturday, 21 July 2017 14:58
      strDate = _date.ToString("HH:mm"); // 15:14
      strDate = _date.ToString("hh:mm tt"); // 03:14 PM
      strDate = _date.ToString("H:mm"); // 5:15
      strDate = _date.ToString("h:mm tt"); // 3:16 PM
      strDate = _date.ToString("HH:mm:ss"); // 15:16:29
      

      【讨论】:

        【解决方案4】:

        将两者转换为与“MM/dd/yyyy”相同的格式。

        改变

        CONVERT(VarChar, 'Saturday, July 1, 2017',1) To cast(SUBSTRING ( CONVERT(VarChar, 'Saturday, July 1, 2017',1) ,CHARINDEX ( ',',CONVERT(VarChar, 'Saturday, July 1, 2017',1) )+1 , Len(CONVERT(VarChar, 'Saturday, July 1, 2017',1)) ) as date)
        

        CONVERT(VarChar, 'Monday, July 31, 2017',1) To cast(SUBSTRING ( CONVERT(VarChar, 'Monday, July 31, 2017',1) ,CHARINDEX ( ',',CONVERT(VarChar, 'Monday, July 31, 2017',1) )+1 , Len(CONVERT(VarChar, 'Monday, July 31, 2017',1)) ) as date)
        

        这是您的查询

         SELECT 
                ROW_NUMBER() OVER (ORDER BY D.D_ID ) AS SL,
                D.D_DATE, D.USER_TP, D_ITEM_TYPE,D_AUTH_REF,D.D_ID, D.SUR_REFNO, D.REF_NO_DT,
                M.PART_NO,
                S.D_NAME,
                PART_DESC, DENOM, QTY_DEM, STORE_TYPE, ITEM_TYPE, EQUIPMENT,D_NO
            FROM SURVEY_HDR D, DEMAND_STATUS S, STORE_MASTER M
            WHERE 
                M.STORE_ID=D.PART_NO_ID
                AND S.D_ID=D.D_STATUS 
                AND Cast(D_DATE as Date) >= cast(SUBSTRING ( CONVERT(VarChar, 'Saturday, July 1, 2017',1) ,CHARINDEX ( ',',CONVERT(VarChar, 'Saturday, July 1, 2017',1) )+1 , Len(CONVERT(VarChar, 'Saturday, July 1, 2017',1)) ) as date)
                AND Cast(D_DATE as Date) <= cast(SUBSTRING ( CONVERT(VarChar, 'Monday, July 31, 2017',1) ,CHARINDEX ( ',',CONVERT(VarChar, 'Monday, July 31, 2017',1) )+1 , Len(CONVERT(VarChar, 'Monday, July 31, 2017',1)) ) as date)
            ORDER BY D.D_ID
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-06-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-15
          • 1970-01-01
          相关资源
          最近更新 更多