在Windows中将DateTime转换为其他格式

时间:2012-08-20 20:49:47

标签: asp.net sql c#-4.0 sql-update

如何转换/转换此日期时间格式: 06/17/2012 12:00:00 AM

至此日期格式: 2012/06/17

在SQL Update语句中?

我需要更改为字段。 BeginDate和EndDate。两种日期时间类型。

到目前为止,这是我的更新声明:

Update discount set DiscountPromotionalID = @DiscountPromotionalID,
   isActive =@isActive, Title = @Title, BeginDate = @BeginDate, EndDate = @EndDate, 
    DiscountPercentage = @DiscountPercentage

    where DiscountPromotionalID = @DiscountPromotionalID;" 

2 个答案:

答案 0 :(得分:1)

如果您将其存储为NVARCHAR(您不应该将其存储),则可以在执行insert / update语句时使用以下内容进行转换。我建议将此列转换为正确的DateTime字段,然后您可以根据评论者的建议在表示层中进行格式化。

查看此资源以了解所有SQL数据格式需求(使用示例sql!)

http://www.sql-server-helper.com/tips/date-formats.aspx

我相信你正在寻找这样的东西(来自上面的资源):

CONVERT(VARCHAR(10), GETDATE(), 111) AS [YYYY/MM/DD]

答案 1 :(得分:0)

与C#DateTime值类似,SQL Server DateTime值没有格式:它只是一个由两个32位整数组成的64位字段。第一个计算自纪元以来的日子(1900年1月1日00:00:00.000);第二个计算自1/300秒开始的时间以来的时间。

在显示格式时应用格式,或者使用CONVERT()在SQL中将其转换为char / varchar,或者在客户端代码中。

您的update声明并不关心格式:它关心价值。如果您将C#DateTime值作为SqlParameter传递给您的存储过程或参数化查询,则会发生正确的事情:CLR将神奇地将其转换为另一个。

如果从C#传递一个字符串作为DateTime参数,则它必须采用SQL Server将识别为DateTime字符串的格式。假设是这种情况,从C#字符串到SQL Server DateTime值的转换同样会神奇地发生。

鉴于您的update语句,代码如下所示:

public int UpdateDiscount( int discountPromotionalID , bool isActive , string title , DateTime beginDate , DateTime endDate , int discountPercentage )
{
  const string updateQuery = @"
Update discount
set DiscountPromotionalID   = @DiscountPromotionalID ,
    isActive                = @isActive              ,
    Title                   = @Title                 ,
    BeginDate               = @BeginDate             ,
    EndDate                 = @EndDate               ,
    DiscountPercentage      = @DiscountPercentage    
where DiscountPromotionalID = @DiscountPromotionalID
" ;

  int rowsAffected ;

  using ( SqlConnection connection = new SqlConnection( SomeConnectString ) )
  using ( SqlCommand    cmd        = connection.CreateCommand() )
  {

    cmd.CommandText = updateQuery ;
    cmd.CommandType = CommandType.Text ;

    cmd.Parameters.AddWithValue( "@DiscountPromotionalID" , discountPromotionalID ) ;
    cmd.Parameters.AddWithValue( "@isActive"              , isActive ? 1 : 0 ) ; // C# bools are true/false; SQL bools are 1/0
    cmd.Parameters.AddWithValue( "@Title"                 , title ) ;
    cmd.Parameters.AddWithValue( "@BeginDate"             , beginDate ) ;
    cmd.Parameters.AddWithValue( "@EndDate"               , endDate   ) ;
    cmd.Parameters.AddWithValue( "@DiscountPercentage"    , discountPercentage ) ;

    connection.Open() ;
    rowsAffected = cmd.ExecuteNonQuery() ;
    connection.Close() ;

  }

  return rowsAffected ;

}