0

请帮忙。

如何格式化 SQLServer 2005 中的 DateTime 列以存储以下格式:(mm/dd/yyy HH:MM:SS AM/PM)

下面是我的代码:

        private void UpdateRecord(string status, int approvalid, DateTime modifiedDate)
    {
        SqlConnection conn = new SqlConnection(_strConn);
        SqlCommand cmd = new SqlCommand(@"UPDATE MyLeaveStatusSP SET LeaveStatus = @LeaveStatus, ModifiedDate = @ModifiedDate WHERE ApprovalID = @ApprovalID;", conn);
        cmd.Parameters.Add("@LeaveStatus", SqlDbType.NVarChar, 50).Value = status;
        cmd.Parameters.Add("@ApprovalID", SqlDbType.Int).Value = approvalid;
        cmd.Parameters.Add("@ModifiedDate", SqlDbType.DateTime).Value = modifiedDate;
        cmd.Connection = conn;
        cmd.CommandType = CommandType.Text;

        try
        {
            conn.Open();
            cmd.ExecuteNonQuery();
        }
        catch (Exception err)
        {
            System.Diagnostics.Debug.WriteLine("ERROR: " + err.Message);
        }
        finally
        {
            conn.Close();
        }
    }
4

3 回答 3

5

不需要格式化——SQL 应该能够按原样插入日期。

SQL 知道如何保存日期;格式化应该在 UI 中完成。

现在,如果您将日期存储在一个varchar字段中,那就是另一回事了,我会简单地回答:不要。

于 2010-11-13T16:34:17.113 回答
1

如果你真的需要,那么你可以在 .NET 中进行转换并传递字符串,或者调用一个存储过程来接收日期并进行转换。由于它与日期时间的任何预定义格式都不匹配,因此您必须自己滚动,但如果很麻烦,这将是微不足道的:

select right('0' + cast(datepart(dd, @dt) as varchar(2)), 2)
 + '/'
 + right('0' + cast(datepart(mm, @dt) as varchar(2)), 2)
 + '/'
 + right(cast(datepart(yyyy, @dt) as varchar(4)), 3) -- are you sure you want yyy and not yyyy?
 + ' '
 + right('0' + cast(datepart(hh, @dt) % 12 as varchar(2)), 2)
 + ':'
 + right('0' + cast(datepart(mi, @dt) as varchar(2)), 2)
 + ':'
 + right('0' + cast(datepart(ss, @dt) as varchar(2)), 2)
 + ' '
 + (case when datepart(hh, @dt) < 12 then 'AM' else 'PM' end)

尽管如此,我还是赞成 LittleBobbyTables 的回答,因为将日期作为字符串存储在数据库中是一个非常糟糕的主意,并且必然会导致问题。我只是详细说明如何进行转换,以防您不得不处理其他人的代码。

于 2010-11-13T17:00:24.237 回答
0

As stated above, you don't set formatting when your saving data... you control it on output. Here are some easy ways to change the formatting on your output using the CONVERT function.

于 2010-11-13T16:42:29.957 回答