【问题标题】:SQL Date type with format带格式的 SQL 日期类型
【发布时间】:2020-02-08 12:40:51
【问题描述】:

我的数据需要这种格式'MM-dd-yyyy hh:mm tt'

CREATE TABLE [dbo].[Bills] 
(
    [Ordernum]  INT       IDENTITY (1, 1) NOT NULL,
    [BillDate]  DATETIME  NOT NULL,
    [ItemsID]   INT       NOT NULL,
    [ClientID]  INT       NOT NULL,
    [PrisNoB]   FLOAT(53) NOT NULL,
    [PrisWithB] FLOAT(53) NOT NULL,

    PRIMARY KEY CLUSTERED ([Ordernum] ASC),

    CONSTRAINT [FKClient] 
         FOREIGN KEY ([ClientID]) REFERENCES [dbo].[Client] ([Id]),
    CONSTRAINT [FKItems] 
         FOREIGN KEY ([ItemsID]) REFERENCES [dbo].[Items] ([Id])
);

那么我在哪里可以定义日期格式MM-dd-yyyy hh:mm tt

我试着这样做:

[BillDate] DATETIME ('MM-dd-yyyy hh:mm tt') NOT NULL,

但我得到一个错误。

【问题讨论】:

  • 不是它在 SQL 中的工作方式。获取数据时转换为字符串。数据库使用内部格式存储值。
  • @GordonLinoff 每次我需要使用它时都将日期转换为字符串并从字符串转换为日期并不好
  • 这适用于哪个 RDBMS?请添加标签以指定您使用的是mysqlpostgresqlsql-serveroracle 还是db2 - 或其他完全不同的东西。

标签: c# sql-server wpf datetime format


【解决方案1】:

你能做的最好的不是视图而是计算列。您可以添加一列,每次计算格式化值:

alter table bill add billdate_formatted as (format(billdate, 'MM-dd-yyyy hh:mm tt'));

您可以通过使列持久化来存储此值一次:

alter table bill add billdate_formatted as (format(billdate, 'MM-dd-yyyy hh:mm tt')) persisted;

这两者都保证billdate_formatted 始终与billdate 同步。

我不推荐persisted。这通常在您想在索引中使用计算列时使用(尽管还有其他情况)。

【讨论】:

    【解决方案2】:

    如前所述,SQL 以其内部格式存储日期,因此您所能做的就是指定数据类型,即datetime不可能更改日期的存储格式(毕竟,为什么你认为它的格式对计算机很重要?这只是一堆包含有关日期信息的数字...)。

    最好的办法是定义view,它将使用format 函数。见FORMAT (Transact-SQL)

    然后使用 view 代替表格。

    另一种方法是编写查询,它将以所需格式返回日期,再次使用format 函数。

    另一个选项是,因为您指定了 WPF 标记,所以将数据获取到程序并处理表示层中的格式,即在您的程序中。这是 IMO 的最佳选择,因为它在数据层和表示层之间保持了良好的分离。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-10
      • 2011-06-22
      • 1970-01-01
      • 1970-01-01
      • 2013-01-21
      • 1970-01-01
      相关资源
      最近更新 更多