用ACCESS编的数据库正确的日期表达式是啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用ACCESS编的数据库正确的日期表达式是啥?相关的知识,希望对你有一定的参考价值。

参考技术A 日期格式不正确 请吧日期格式化后在查询 Format(Now, "yyyy-mm-dd hh:ss:MM") 参考技术B 进行日期比较时,必需两端的格式要一致
建议使用DateDiff来判断设置条件(可以判断年/月/日/季度/时/分/秒)
比如按日判断
DateDiff("d",date1,date2)
参考技术C 把下午2字去掉,改为 #2009/6/11 16:53:47#

EF Core 中查询类型的正确日期时间转换是啥?

【中文标题】EF Core 中查询类型的正确日期时间转换是啥?【英文标题】:What is the correct datetime-cast for a QueryType in EFCore?EF Core 中查询类型的正确日期时间转换是什么? 【发布时间】:2019-07-01 07:02:37 【问题描述】:

我的数据库中有一个我想用 EF Core 读取的视图。

我用视图读取的数据是一个 int 列,我可以通过这个 SQL 语句将其转换为正确的日期:

 CONVERT(NVARCHAR, DATEADD(MI, wf_activate, '1899-30-12'), 101) + ' ' + 
     CONVERT(NVARCHAR, DATEADD(MI, wf_activate, '1899-30-12'), 110) AS Start

这会将数据正确转换为:

12/17/2018 12-17-2018

现在我想通过 EF Core 2.1 使用此模型访问我的视图:

/// <summary>
/// Basis data from an ELO workflow.
/// </summary>
public class WorkflowStrangeUsersModel

    /// <summary>
    /// Gets or sets the workflow start date.
    /// </summary>
    public DateTime Start  get; set; 

还有这个上下文:

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    
        modelBuilder.Query<WorkflowStrangeUsersModel>().ToView("INTRANET_WorkflowsStrangeUsers");
    

这适用于字符串和int等,但在这种情况下,日期时间会引发错误:

读取属性“WorkflowStrangeUsersModel.Start”的数据库值时发生异常。预期类型是“System.DateTime”,但实际值是“System.String”类型。

所以我假设我转换为 101 / 110(美国日期格式)是错误的。我也尝试了本地格式(德语)和默认格式(0),但同样的错误。

有什么想法吗?

【问题讨论】:

将日期存储为数据库中的日期,这将使您的生活更轻松 它是我无权访问的数据库。我只是可以存储我的观点并在那里做事。 1 - 您的 TSQL 不应返回字符串,而是返回 DateTime,2- 12/17/2018 12-17-2018 绝不是正确的日期。我通常检查CAST and CONVERT doc.中的TSQL格式 如果您可以更改您的 VIEW 定义,请将其更改为以下内容:convert(datetime, CONVERT(NVARCHAR, DATEADD(MI, wf_activate, '18991230'), 101)) 【参考方案1】:

也许您可以将日期作为 int 检索,然后使用 C# 将其转换为 Datetime。您可以为此使用 2 个属性,StartInt 和 StartDate(那个是只读的)

【讨论】:

但是当我有一个 DTO 用于查询中绑定的那个视图时,afaik 视图将需要同时具有这两种类型。除此之外,对于很多日期时间来说,这似乎是一个糟糕的解决方案(这只是一个例子,我有一堆) 您可以使用 [NotMapped] 属性,但实际上,如果您有多个 DateTime,这不是一个好的解决方案。你看过docs.microsoft.com/en-us/ef/core/modeling/value-conversions吗? 以前找到过,是的,但我不明白这如何适合我的问题 自定义值转换将帮助您从该花哨的字符串中获取日期,尽管我只是修改视图以返回日期。【参考方案2】:

就像@bradbury9 暗示的那样,我会改变我的观点

DATEADD(MI, wf_activate, '1899-30-12') AS Start

这将使调用数据库时已经启动一个日期时间列。

使用问题中的视图,您首先从 DATEADD 函数获取日期时间,然后使用 CONVERT 将其转换为 NVARCHAR(字符串)。

【讨论】:

以上是关于用ACCESS编的数据库正确的日期表达式是啥?的主要内容,如果未能解决你的问题,请参考以下文章

ACCEss表中要设置默认值:DATE()结果是例:2011-8-29,我想要带时间的,例2011-8-29 5:45:12

access中查询出来值的为空,如何将空值改为0,具体表达式是啥,从啥地方输入表达式,多谢

Access 2016 中表达式中的日期语法错误

“条件表达式中的数据类型不匹配”错误将日期插入 Access 数据库中的日期/时间字段

cron表达式是啥

Access 中的表达式在 Excel 中未正确显示