gpt4 book ai didi

sqlite - F# 查询表达式 - 在 SqlProvider 和 SQLite 中使用字符串比较的限制

转载 作者:行者123 更新时间:2023-12-03 15:54:32 27 4
gpt4 key购买 nike

SQLite 并没有真正的日期列。您可以将日期存储为 ISO-8601 字符串,或自纪元以来的整数秒数,或 Julian 日数。在我使用的表中,我希望我的日期是人类可读的,所以我选择使用 ISO-8601 字符串。

假设我想查询今天之后的所有记录。 ISO-8601 字符串将正确排序,因此我应该能够使用字符串与今天日期的 ISO-8601 字符串进行比较。

但是,我看不到使用 F# SqlProvider 类型提供程序进行比较的方法。我希望这只是我缺乏 F# 查询表达式知识的反射(reflect)。

例如,我不能这样做:

   query { 
for calendarEntry in dataContext.``[main].[calendar_entries]`` do
where (calendarEntry.date >= System.DateTime.Today.ToString("yyyy-MM-dd hh:mm:ss"))
... }

我得到:

The binary operator GreaterThanOrEqual is not defined for the types 'System.String' and 'System.String'.

我也不能做任何变体:

   query { 
for calendarEntry in dataContext.``[main].[calendar_entries]`` do
where (calendarEntry.date.CompareTo(System.DateTime.Today.ToString("yyyy-MM-dd hh:mm:ss")) >= 0)
... }

我得到:

Unsupported expression. Ensure all server-side objects appear on the left hand side of predicates.  The In and Not In operators only support the inline array syntax.

有人知道我如何在 where 子句中进行字符串比较吗?看来我在查询中过滤的唯一选择是在数据库中存储自纪元以来的秒数并使用整数比较。

最佳答案

这是旧 SQLProvider 版本的临​​时错误,现在应该可以使用了。如果没有,请向 GitHub 存储库开一个新问题:https://github.com/fsprojects/SQLProvider

关于sqlite - F# 查询表达式 - 在 SqlProvider 和 SQLite 中使用字符串比较的限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24170684/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com