表示日期为32作为Day的最大值

ram*_*mar 8 c# sql-server asp.net

我正在使用Sql server 2005在asp.net中构建应用程序.在我的应用程序中,我必须代表许多日期和日期是尼泊尔(Bikram sambhat),其中某个月的最大日期可以是32.

那么在sql server中表示日期的最佳选择是什么,以便32可以放置为日值并且可以在sql server和asp.net中轻松比较(操作)?

Run*_*tad 7

有一个人已经实施了一些在尼泊尔日期和格里高利日期之间转换的课程.这样,您可以以尼泊尔格式输入日期,但以SQL Server可以理解的格式存储它们.看这里:http://rrajbhandari.blogspot.com/2010/06/bikram-sambat-classes-and-controls.html

请记住,任一日历中的日期都可以转换为另一个日历 - 它们指向同一天.

  • @ramkumar:我不会将日期存储为varchar.相反,我会将其存储为常规sql日期,并在显示日期时进行转换.从用户输入日期时,必须进行相同的转换.这将允许您使用常规的sql server日期函数进行比较和所有这些,因此它可能会简化您的代码. (2认同)

cap*_*aig 5

我建议使用内置的Date类型.听起来您的格式中的任何日期都可以轻松转换为标准的sql格式.

我只想编写一个实用程序,以便在加载或写入数据库时​​将sql server中的任何日期转换为显示格式.


Ric*_*iwi 4

从尼泊尔语到公历的转换并不容易。从两个方面来思考:

  • 需要显示尼泊尔日期
  • 需要操纵(例如找出月份、日期等之间的差异)

第一个很容易 - 存储为 varchar
第二个则不然。如果您想知道 2 个尼泊尔日期之间的差异,可以将第二个日期存储为公历日期,并在它们之间使用 datediff/dateadd(day) 。然而,dateadd(month) 在这里对你来说毫无用处,除非你想知道 2 个尼泊尔日期的差异in Gregorian date months- 这并不常见。

听起来就像只存储在 varchar 中并拥有一个尼泊尔日期库(无论是在前端还是作为 CLR)会更好。


拥有一个具有相应公历日期的完全具体化的尼泊尔日期表可能有助于转换,因此布局将是

NepaliYear   NepaliMonth   NepaliDay  Gregorian
x            4             2          2014-21-23
etc
Run Code Online (Sandbox Code Playgroud)

但我不确定除了转换之外它对(尼泊尔)日期数学有多大帮助 - 并且仅当您需要在 SQL Server 中进行此类转换时。

编辑

@pst 的评论

相比日期时间,更喜欢 VARCHAR 是有原因的。我假设大多数活动的频率是读/写尼泊尔日期 - 它作为 VARCHAR 存储和读取 - 没有转换。当且仅当需要日期数学时,才涉及库 - 在这种情况下,您调用转换,并且仅当您在任何时间点需要等效的公历时。如果您想要的只是尼泊尔日期/标量或尼泊尔日期/尼泊尔日期之间的数学 - 同样,日期时间没有任何好处 -它无法处理一个月内的第 32 天