如何在 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 中格式化当前日期和时间,但只包含时间本身?的主要内容,如果未能解决你的问题,请参考以下文章