【问题标题】:How can I store only the date portion of the datetime. Today property to a SQL Server table datetime column?如何仅存储日期时间的日期部分。今天属性到 SQL Server 表日期时间列?
【发布时间】:2018-07-27 14:10:41
【问题描述】:

我正在尝试使用更新 SQL Server 2012 表中的 datetime

newItem.DateSaved = DateTime.Today;

我只想保存DateTimeDate 部分,但是当我查看表格时,我可以看到它还保存了时间部分:2018-07-27 00:00:00.000。 我怎样才能让它只存储date 部分? 2018-07-27?

编辑

因为我的专栏是datetime,我看到我不能只存储日期部分。但是我如何才能只向用户显示没有时间的日期部分呢?这是 Linq-to-SQL 查询的选择部分:

select new { Date = smv.DateSaved.Value.Date }).Distinct();

【问题讨论】:

  • 既然是DateTime,总会有时间元素。如果您不需要时间,则仅向用户显示日期部分
  • DateTime.Today.Date.ToString("d");
  • 将列类型设置为Date
  • 您的列的 sql 类型是 datetime,因此它希望满足这一点,因此时间部分默认为全零。如果您不想要时间部分,请将其更改为date
  • @Plutonix 请检查编辑后的帖子

标签: c# sql sql-server-2012 linq-to-sql


【解决方案1】:

datetime 列总是一个时间部分 - 只是,在你的情况下,它都将是零。 datatime 只是底层的一个数字;它对拥有/没有什么没有任何选择;同样,在您的代码尝试显示它之前,它没有任何格式的概念,然后选择格式的是 dispaying 代码。

如果您不想要时间部分,请在您的专栏中使用 date 而不是 datetime

【讨论】:

    【解决方案2】:

    将 SQL Server 中的列类型从 datetime 更改为 date (https://docs.microsoft.com/en-us/sql/t-sql/data-types/date-transact-sql?view=sql-server-2017)

    【讨论】:

      【解决方案3】:

      如果您只想在 SQL Server 数据库中存储没有时间的日期,您可以将列类型设置为 date

      ALTER TABLE table_name
      ALTER COLUMN DateSaved date; 
      

      参考:https://docs.microsoft.com/en-us/sql/t-sql/data-types/date-transact-sql?view=sql-server-2017

      如果您的模型中有DateTime 属性,并且您只想显示日期部分,只需在视图中的控件中对其进行格式化。例如:

      $"{newItem.DateSaved:yyyy-MM-dd}"
      

      newItem.DateSaved.ToString("yyyy-MM-dd")
      

      如果您想使用默认格式,也可以使用"d""D"(短版和长版)而不是特定格式,如"yyyy-MM-dd"

      如果您的视图是用 HTML 或 XAML 编写的,请使用相同的格式化技术。

      【讨论】:

        【解决方案4】:

        这是因为您在数据库中的字段是DateTime。如果你只想存储日期,你应该有一个日期数据类型的字段。在这个link,你可以看到日期数据类型的区别。

        【讨论】:

          猜你喜欢
          • 2016-09-19
          • 1970-01-01
          • 2010-11-04
          • 2011-09-06
          • 1970-01-01
          • 2018-01-13
          • 1970-01-01
          • 2019-07-01
          • 1970-01-01
          相关资源
          最近更新 更多