在SQL Server存储过程中格式化日期的最佳方法

时间:2014-06-10 00:52:13

标签: c# asp.net sql-server

这是使用带有date类型

的SQL Server的示例数据
TglUnggah = 30/03/2014

我需要日期格式' dd / MM / yyyy'

我的存储过程

ALTER proc [dbo].[SP_ViewFile] 
AS 
BEGIN   
   SELECT        
      IdFile, IdAkses, NamaFile, Count, 
      CONVERT(VARCHAR(10), TglUnggah, 103) AS TglUnggah, 
      Keterangan, Role, Url     
   FROM            
      tbFile 
END

在ASP.NET中运行此存储过程时,数据为30/03/2014,但在详细信息视图中,格式更改为30/03/2014 0:00:00且无法更新

在SQL Server /存储过程/ ASP.NET中使用格式dd/MM/yyyy的最佳方法是什么?

5 个答案:

答案 0 :(得分:1)

以上都不是。尽可能使用DateTime。只有在需要向用户显示输出时才转换为格式化字符串。此时,您应该使用适合该用户文化的任何格式。

DateTime的优点是可以轻松进行操作,而且您不必担心在任何地方转换格式。 DateTime实际上是一个自特定日期以来的滴答数量的包装器(您不需要知道),因此没有DateTime对象的固有字符串表示(您需要知道这一点)。

答案 1 :(得分:0)

在C#中,您可以使用DateTime.TryParseExact

在SQl服务器中,您可以使用Cast and Convert

答案 2 :(得分:0)

您可以使用此程序:

       public static string ConvertDtFormat(string dateTimeString)
       {
           dateTimeString = dateTimeString.Trim();
           while (dateTimeString.Contains("  "))
           {
               dateTimeString = dateTimeString.Replace("  ", " ");
           }

           if (dateTimeString == null || dateTimeString.Length == 0)
           {
               return string.Empty;
           }
           else
           {
               DateTime convertedDateTime = new DateTime();
               string userDateFormat = HMS.DEFAULT_DATE_FORMAT;

               try
               {
                   if (userDateFormat.Trim().Contains("dd/MM/yyyy"))
                       convertedDateTime = DateTime.ParseExact(dateTimeString, format_dmy, CultureInfo.InvariantCulture,
                                                               DateTimeStyles.AllowLeadingWhite | DateTimeStyles.AllowTrailingWhite);
                   else if (userDateFormat.Trim().Contains("MM/dd/yyyy"))
                       convertedDateTime = DateTime.ParseExact(dateTimeString, format_mdy, CultureInfo.InvariantCulture,
                                                               DateTimeStyles.AllowLeadingWhite | DateTimeStyles.AllowTrailingWhite);

                   return convertedDateTime.ToString("MMM dd, yyyy hh:mm tt");
               }
               catch
               {
                   return "Invalid DateTime";
               }
           }
       }

答案 3 :(得分:0)

要解决此问题的最佳方法是: - 在完成之前的操作中写完

Set Dateformat DMY 

了解dateformat的基本规则: -

http://blog.sqlauthority.com/2007/09/28/sql-server-introduction-and-example-for-dateformat-command/

喜欢

CREATE PROCEDURE SPNAME
(
     parameter...
)
as

BEGIN
SET DATEFORMAT DMY

OTHER STATEMENT
END

你可以测试为

Set Dateformat dmy

Declare @date datetime = '10-06-2012'

select @date

只需根据需要转换日期时间格式

http://msdn.microsoft.com/en-IN/library/ms189491.aspx

http://forums.asp.net/t/1740263.aspx?SET+DATEFORMAT+dmy+SELECT+FROM+Table1+WHERE+Type+ee+order+by+cast+Date+as+datetime+desc

答案 4 :(得分:0)

另外要考虑的事情。全球化时,您可能需要处理不同的时区,因此您可能希望存储日期时间偏移量的日期,以便存储UTC时间。