如何在 SQL 中格式化当前日期和时间,但只包含时间本身?

Posted

技术标签:

【中文标题】如何在 SQL 中格式化当前日期和时间,但只包含时间本身?【英文标题】:How to format the current date and time in SQL but to only include the time by itself? 【发布时间】:2020-02-09 17:22:18 【问题描述】:

我不确定如何将“默认系统日期”格式化为只有运行时的时间位?

所以输出将是当前时间 '15:20:52' 没有日期。

我正在使用 sql plus。

创建表时,如下所示:

create table timeslot
(
tsdate default sysdate not null,
tstime default sysdate not null)

【问题讨论】:

用您正在使用的数据库标记您的问题。 只需将sysdate 用作DEFAULT 并在查询表时提取您需要的部分。您还可以创建一个视图,从表中选择并提取所需的部分。 【参考方案1】:

SQLPLUS 标签表示“Oracle”。

由于 Oracle 不提供“时间”数据类型,您将使用单列:

SQL> create table timeslot
  2    (id   number    primary key,
  3     ts   date      default sysdate not null
  4    );

Table created.

SQL> insert into timeslot (id) values (1);

1 row created.

SQL>

我插入了什么?

SQL> select * From timeslot;

        ID TS
---------- --------
         1 03.06.20

SQL>

哦,男孩,这看起来很丑......不可能知道它到底是什么,因为它可能是

2020 年 3 月 6 日或 2003 年 6 月 20 日或 1920 年 6 月 3 日或...

但是,这只是因为我的数据库上的当前 NLS 设置显示 date 数据类型值。 Oracle 以 7 字节二进制格式(我们人类无法识别)存储日期,因此我们必须做一些事情来很好地呈现这些值。例如:

SQL> alter session set nls_date_format = 'dd.mm.yyyy';

Session altered.

SQL> select * From timeslot;

        ID TS
---------- ----------
         1 03.06.2020

好的,这是日期,但是时间呢?

SQL> alter session set nls_date_format = 'dd.mm.yyyy hh24:mi:ss';

Session altered.

SQL> select * From timeslot;

        ID TS
---------- -------------------
         1 03.06.2020 19:38:37

SQL>

当然,您不会每次都alter session。您可以使用带有适当格式掩码的 to_char 函数:

SQL> select id,
  2         to_char(ts, 'dd.mm.yyyy hh24:mi:ss') ts
  3  from timeslot;

        ID TS
---------- -------------------
         1 03.06.2020 19:38:37

SQL>

或者,当您想要拆分日期和时间组件时,您应该

SQL> select id,
  2         to_char(ts, 'dd.mm.yyyy') c_date,
  3         to_char(ts, 'hh24:mi:ss') c_time
  4  from timeslot;

        ID C_DATE     C_TIME
---------- ---------- --------
         1 03.06.2020 19:38:37

SQL>

或者,创建一个为您执行此操作的 VIEW:

SQL> create or replace view v_timeslot as
  2  select id,
  3         to_char(ts, 'dd.mm.yyyy') c_date,
  4         to_char(ts, 'hh24:mi:ss') c_time
  5  from timeslot;

View created.

SQL> select * from v_timeslot;

        ID C_DATE     C_TIME
---------- ---------- --------
         1 03.06.2020 19:38:37

SQL>

【讨论】:

【参考方案2】:

如果您使用的是 MS SQL,请尝试如下-

SELECT GETDATE() AS INPUT,CONVERT(VARCHAR(10), GETDATE(), 108) AS EXPECTED_OUTPUT;

【讨论】:

【参考方案3】:

使用 SQL Server:

select convert(varchar, getdate(), 8)

【讨论】:

以上是关于如何在 SQL 中格式化当前日期和时间,但只包含时间本身?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL Server中 将日期格式化

sql日期

SQL Date 函数

SQL Date 函数

sql如何取得当前日期

如何以某种格式将日期和时间插入 SQL Server 数据库? [复制]