【问题标题】:SQL: Compare Date Range in a String text fieldSQL:比较字符串文本字段中的日期范围
【发布时间】:2017-12-20 04:29:22
【问题描述】:

我有一个 MS Access 数据库。我正在用 C# 编写一个应用程序来访问它。我在 MS Access 中有一个类型为“Short Text”的字段“FileName”。FileName 字段中的数据类似于“Test 11-12-2004 15.11.15”。

使用日期范围,我必须根据文件名字段搜索记录。我无法获取 - 如何比较这种格式的日期并检索记录? FileName 是 Text 类型,而 date 是它的子字符串。仅检索日期部分并与>= beginDate && <= endDate 进行比较对我来说似乎是一个难题。

谁能建议我如何编写 SQL 查询来执行此日期范围比较并检索这些记录 - “Select * from TestHead where FileName......” ????

感谢任何帮助。

非常感谢,

【问题讨论】:

  • 我会在表格中添加一个新列 FileDate 日期/时间类型,并根据文件名填充此列。可以使用 C# 中的循环记录来完成一次。在此之后,您将能够使用常规 SQL 查询进行高速搜索。

标签: sql string ms-access compare date-range


【解决方案1】:

在您的 C# 代码中,当您浏览记录时,我会像这样拆分字符串:

char[] delimiters = {' '};
string[] FileNameParts = FileName.Split(delimiters);

这将产生一个数组FileNameParts,其中的第二个元素将包含日期,您可以将其转换为实际日期以用于查询:

DateTime FileNameDate = Convert.ToDateTime(FileNameParts(1))

类似的东西:

sSQL = "SELECT * FROM Table WHERE " & beginDate & " <= " & FileNameDate

我认为这比在表中添加包含 FileName 字段的日期子字符串的列更可取,因为这样,每当修改现有记录或添加新记录时,您都需要不断更新该列。这意味着 C# 端更混乱,或者 Access 端的 UPDATE 查询至少需要定期调用。无论哪种方式,它都会与数据库进行更多的通信。

【讨论】:

  • 非常感谢。是的,更新新的列值会更有问题。这对我有帮助。我不得不使用 DateTime.TryParseExact 而不是 Convert.ToDateTeime——因为 convert 使用的格式与 beginDate 和 endDate 不同。然而,为了确保我为所有 3 个日期事件设置相同的格式;导致完全不匹配。非常感谢。
猜你喜欢
  • 2012-08-14
  • 2010-10-24
  • 2012-10-19
  • 1970-01-01
  • 2023-03-08
  • 2018-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多