将字符串转换为有效的MS SQL日期时间,以便在数据库中搜索

本文关键字:数据库 搜索 时间 日期 转换 字符串 有效 SQL MS | 更新日期: 2023-09-27 18:14:52

我看到了很多答案,其中大部分包括使用DateTime.ParseExact和"CultureInfo "。但它对我不起作用,我不确定这些答案是否100%与我需要解决的问题相关。

我有一个表,记录来自数据库。用户可以根据不同的条件执行搜索,其中一个条件是日期。我使用了一些继承的jQuery日历,在我的控制器中,来自日期文件的数据格式为"dd/mm/yyyy hh:mm:ss"。我希望能够使用这些信息来执行搜索数据库中的记录在同一日期。一个问题是,我想只使用日期而不是时间,但我不确定以什么顺序来解决这个问题,所以我决定将传入字符串转换为有效的MS SQL datetime,看看会发生什么,并考虑时间。

我尝试了不同的东西,这是我最后一次,之后我决定在这里发布:

    if (!String.IsNullOrEmpty(selDate))
    {
        CultureInfo myCItrad = new CultureInfo("bg-BG", false);
        DateTime parsedDate = DateTime.ParseExact(
           selDate,
           "dd.MM.yyyy hh:mm:ss",
           myCItrad);
        model = model.Where(m => m.Date == parsedDate);
    }

将字符串转换为有效的MS SQL日期时间,以便在数据库中搜索

当我解析selDate字符串不包含它们时,它是- "23/05/2013 09:04:45"

如果您的输入字符串看起来像"23/05/2013 09:04:45",那么您应该对ParseExact使用此模式:"dd/MM/yyyy hh:mm:ss"

if (!String.IsNullOrEmpty(selDate))
{
    CultureInfo myCItrad = new CultureInfo("bg-BG", false);
    DateTime parsedDate = DateTime.ParseExact(
       selDate,
       "dd/MM/yyyy hh:mm:ss",
       myCItrad);
    model = model.Where(m => m.Date == parsedDate);
}

leon,

应用程序和SQL之间的日期问题众所周知。

  1. SQL和。net日期时间类型不同:http://msdn.microsoft.com/en-us/library/system.data.sqltypes.sqldatetime.aspx
  2. 在SQL和。net中都有许多日期时间格式,它们都需要被视为数字类型。

因此,您需要知道如何在。net端转换各种日期时间格式,将其转换为SQL类型,反之亦然。这不是一个好的做法…

  1. 使用SqlDateTime进行转换。或者:
  2. 一个简单的,有点"肮脏"的解决方案是这样的:
    • 取用户想要的日期。计算它是从多少天开始的当前(例如--> int days = (DateTime.Now-selectDate). days;
    • 现在在数据库查询中,使用SQL: GetDate()-days

唯一的问题是我只想使用日期而不是时间,

这与SQL日期格式无关。

如果你想只使用日期而不使用时间,你可以这样做:

model = model.Where(m => m.Date.Date == parsedDate.Date);

或者

model = model.Where(m => (m.Date >= parsedDate.Date && m.Date < parsedDate.Date.AddDays(1));

在上面的m.Date.DateparsedDate.Date中,您使用DateTime.Date属性来获取日期值的日期组件,丢弃时间组件。

DateTime在SQL中的格式为yyyy-MM-dd HH:mm:ss。正确的代码是

DateTime parsedDate = DateTime.ParseExact(selDate, "yyyy-MM-dd" myCItrad);