从.Net Core中具有日期范围的数据库查询

问题描述

我收到一个MysqL数据库,并且其中一个表具有字符串格式的Date列,现在我需要使用Pomelo和EF Core构建一个.Net核心服务器,并且要求我的服务器可以查询该表中某个范围内的数据日期,但由于该表的“日期”列为字符串格式,因此我不知道如何查询它,请提供帮助。 谢谢!

解决方法

您将必须将该字符串放入日期中才能进行查询。

我可能会在表中添加一个新的datetime列,然后创建一个读取每个字符串日期的简单控制台应用程序,尝试将其解析为一个datetime并将其保存到新的datetime列中。

然后,您应该查看多少行具有有效的日期时间,并更正其他行

最后,您可以使用实体框架进行查询

,

how to convert a string to date in mysql?

正如在这里被告知

您可以查询日期字符串

SELECT  STR_TO_DATE(yourdatefield,'%m/%d/%Y')
FROM    yourtable
,

随着数据库架构的改变

如果可以(即允许)更改相关表的架构,则只需添加新的datetimedate列,然后将数据从旧列复制到新列即可一,然后删除列:

ALTER TABLE `YourTable` ADD COLUMN `NewDateColumn` date NOT NULL;
UPDATE `YourTable` SET `NewDateColumn` = STR_TO_DATE(`OldDateColumn`,'%Y-%m-%d');
ALTER TABLE `YourTable` DROP COLUMN `OldDateColumn`;

您可以仅使用MySQLWorkbench或命令行工具运行这些语句。当然,您首先需要使用本地副本对其进行测试,以确保一切正常。

带有值转换器

如果您无法更改表的架构,则只要数据库中的日期字符串采用按字母顺序排序的字符串格式(例如YYYY-MM-DD),您仍然可以从数据库中查询日期范围。 。在这种情况下,您只需在实际的应用程序代码中使用value converter,而根本不需要更改数据库:

public class SomeModel
{
    public int SomeModelId {get; set;}
    public DateTime YourDateProperty {get; set;} // <-- the type you want to use in .NET
}

public class Context : DbContext
{
    public virtual DbSet<SomeModel> SomeModels { get; set; }

    // ...

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<SomeModel>(
            entity =>
            {
                entity.Property(e => e.YourDateProperty)
                    .HasColumnType("varchar(255)") // <-- the type it has in the database table
                    .HasConversion(
                        v => v.ToString(@"yyyy\-MM\-dd"),v => DateTime.Parse(v,CultureInfo.InvariantCulture));
            });
    }
}

// Here is how a sample query in your app would look like:
var query = context.SomeModels
    .Where(m => m.YourDateProperty >= new DateTime(2020,9,1) &&
                m.YourDateProperty < new DateTime(2020,10))
    .ToList();

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...