如何格式化SQL Server DateTime(mm / dd / yyyy HH:MM:SS AM / PM)

时间:2010-11-13 16:28:50

标签: c# sql sql-server sql-server-2005 splistitem

请帮助。

如何格式化SQL Server 2005中的DateTime列以存储以下格式:(mm / dd / yyyy 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();
        }
    }

3 个答案:

答案 0 :(得分:5)

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

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

现在,如果您将日期存储在varchar字段中,那就是另一个故事,我只想回答:不要。

答案 1 :(得分: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的答案,因为在数据库中将日期存储为字符串是一个非常糟糕的主意并且必然会导致问题。我只是详细说明如何进行转换,以防你不得不处理别人的代码。

答案 2 :(得分:0)

如上所述,您在保存数据时不设置格式...您可以在输出中控制它。以下是使用CONVERT函数输出的some easy ways to change the formatting