【问题标题】:Convert separate date and time data types to the format I want to use in my table将单独的日期和时间数据类型转换为我想在表中使用的格式
【发布时间】:2020-10-13 01:55:17
【问题描述】:

我正在使用 Microsoft SQL Server Management Studio 来完成我的查询。

我查到的获取日期格式和时间格式的资料是:

SELECT FORMAT (GETDATE(), 'dd-MM-yyyy') AS date

SELECT FORMAT(GETDATE(), 'HH:mm') AS time

它采用当前日期和时间并以我需要的格式呈现给我,但我想知道如何将其应用于我正在创建的表中的数据?

这是我目前拥有的:

CREATE TABLE Schedule 
(
    movieID INT,
    screeningID INT,
    date DATE,
    time TIME,

    FOREIGN KEY (movieID) REFERENCES Movie (movieID),
    FOREIGN KEY (screeningID) REFERENCES MovieScreening (screeningID)
); 

这是我要插入的数据:

INSERT INTO Schedule VALUES (1, 1, '14-03-2020', '11AM') 
INSERT INTO Schedule VALUES (2, 2, '14-03-2020', '12PM')
INSERT INTO Schedule VALUES (3, 3, '14-03-2020', '1PM')
INSERT INTO Schedule VALUES (4, 4, '14-03-2020', '2PM')
INSERT INTO Schedule VALUES (5, 5, '14-03-2020', '3PM')
INSERT INTO Schedule VALUES (6, 6, '14-03-2020', '4PM')
INSERT INTO Schedule VALUES (7, 7, '14-03-2020', '5PM')
INSERT INTO Schedule VALUES (8, 8, '14-03-2020', '6PM')
INSERT INTO Schedule VALUES (9, 9, '14-03-2020', '7PM')
INSERT INTO Schedule VALUES (10, 10, '14-03-2020', '8PM')
INSERT INTO Schedule VALUES (1, 11, '15-03-2020', '11AM')
INSERT INTO Schedule VALUES (2, 12, '15-03-2020', '12PM')
INSERT INTO Schedule VALUES (3, 13, '15-03-2020', '1PM')
INSERT INTO Schedule VALUES (4, 14, '15-03-2020', '12PM')
INSERT INTO Schedule VALUES (5, 15, '15-03-2020', '3PM')
INSERT INTO Schedule VALUES (6, 16, '15-03-2020', '4PM')
INSERT INTO Schedule VALUES (7, 17, '15-03-2020', '5PM')
INSERT INTO Schedule VALUES (8, 18, '15-03-2020', '6PM')
INSERT INTO Schedule VALUES (9, 19, '15-03-2020', '7PM')
INSERT INTO Schedule VALUES (10, 20, '15-03-2020', '8PM')

这是我在测试格式代码并选择上面创建的表时得到的输出。

Screenshot

我一直在尝试自己解决这个问题,并在网上搜索可以应用于我自己工作的解决方案,但我可以寻求一些帮助,因为我有点迷路了。

编辑:所以我评论了其中一个答案,我只想澄清我的用例以及将日期和时间分开的原因。

所以我的用例是电影时间表,我需要将日期和时间分开,以便可以进行搜索查询以查找与特定时间或特定日期相关的详细信息,因为时间表具有确切的每天都有相同的时间表,我需要它们作为单独的数据类型。我在这个数据库中有五个表,还有两个链接到这个计划表的表;一个是电影列表,另一个包含电影放映详细信息,例如票价、电影 ID 和剧院 ID,该 ID 将表格与剧院列表和有关这些剧院的信息联系起来。

如果有帮助 here 是我在 excel 中创建数据库表之前创建的数据模型,但我遇到的唯一问题是让我的日期和时间以我想要的方式显示。

我希望能够调用数据,例如:

    SELECT Schedule.movieID, Schedule.time
    FROM Schedule
    WHERE (Schedule.time = '11AM')

当我运行它时,我得到一个看起来像 this. 的返回表

如果时间列将数据返回为 'hh:mm' 我更愿意,我只是不确定如何让它做到这一点,是否有一个时间数据类型只会返回 'hh:mm' ?

【问题讨论】:

标签: sql sql-server date time format


【解决方案1】:

您应该考虑 DATE 类型的 SQL 格式是 YYYY-MM-DD,您只能在查询选择或过滤时更改它 否则,如果您将格式存储在数据库中,则应将它们存储在 NVachar 类型的其他字符串类型列中

【讨论】:

  • 您应该绝不将日期或时间信息存储为NVARCHAR!而且 DATE 类型的 SQL 格式绝对不是 YYYY-MM-DD - 这可能是默认的显示格式,但肯定不是以那种格式存储的。
【解决方案2】:

所以datetimedatetime 数据类型不会以任何格式在内部存储。格式化是显示数据的功能。

并且您应该始终在相关的情况下使用datetimedatetime 数据类型,因为将它们存储为字符串的替代方案会在后续引入大量问题。

数据的显示确实应该留给应用程序,但是如果您想将其格式化为查询的一部分,那么这取决于您,而不是

select *
from Schedule;

使用

select id, FORMAT([date], 'dd-MM-yyyy'), FORMAT([time], 'HH:mm')
from Schedule;

【讨论】:

  • 我同意这一点,但也同意@Wouter。我看不出有任何理由不将日期/时间合并到一个单元格中,然后在检索时对其进行格式化。
  • @NathanChampion 这不是 OP 所要求的 - 无论他们使用日期+时间还是日期时间,他们的问题的答案都是相同的 - 使用格式作为选择的一部分。而且由于我不知道他们的用例,我不打算建议一种或另一种方式。
  • @NathanChampion 我怀疑“以这种方式存储它完全 100% 正确”没有传达我的意思 - 我使用字符串支持 OP not :)不建议date+timedatetime 好。
  • 所以我的用例是电影时间表,我需要将日期和时间分开,以便可以进行搜索查询以查找与特定时间或特定日期相关的详细信息,因为时间表对于我需要它们作为单独的数据类型的每一天都有完全相同的时间表。我在这个数据库中有五个表,还有两个链接到这个计划表的表;一个是电影列表,另一个是剧院列表。我希望能够调用数据,例如:''' SELECT Schedule.movi​​eID, Schedule.time FROM Schedule WHERE (Schedule.time = '11AM') '''
  • @Faith 很棒 - 这能回答你的问题吗?
【解决方案3】:

将您的日期和时间存储在具有 datetime 数据类型的列中。格式不应存储在您的数据库中。在您的申请或报告中显示日期时应用该格式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-02
    • 2020-10-03
    • 1970-01-01
    • 2019-08-31
    • 2016-10-13
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    相关资源
    最近更新 更多