sql - 选择具有时间格式的所有列

标签 sql string oracle datetime

我有很多列,其中一些包含时间戳。我想获取所有列记录,但要格式化日期/时间的记录:

我知道我可以单独获取所有列,但有 20 列,所以我想避免这样做:

select 
    id, 
    -- ... 19 other columns, 
    TO_CHAR(porh_received, 'YYYY-MM-DD HH24:MI:SS')
from pick_order_hist;

我期待这样的事情:

select *, TO_CHAR(porh_received, 'YYYY-MM-DD HH24:MI:SS') from pick_order_hist;

但它不起作用。

最佳答案

选项 1

一种解决方案是将 session 的 NLS 设置更改为目标时间戳格式,该设置控制返回时间戳的默认格式。根据您的实际数据类型,这可能是以下三种中的任何一种:

alter session set nls_timestamp_format = 'YYYY-MM-DD HH24:MI:SS';
alter session set nls_timestamp_tz_format = 'YYYY-MM-DD HH24:MI:SS';
alter session set nls_date_format = 'YYYY-MM-DD HH24:MI:SS';

然后,你可以简单地做:

SELECT * FROM pick_order_hist;

这种方法的缺点是,这会改变 session 生命周期的默认格式(或者直到后来更改为其他格式)。根据您的用例,这可能是您需要的,也可能不是。

选项 2

否则,您可以使用 * 获取所有列,然后在结果集中使用列别名添加格式化的时间戳列。因此,无需列出所有列,您只需列出时间戳列。缺点是您会在结果集中获得一些额外的列,每个列对应一个未格式化的时间戳;您可以在您的应用程序中简单地忽略它们。

SELECT
    t.*, 
    TO_CHAR(porh_received, 'YYYY-MM-DD HH24:MI:SS') porh_received_with_format
FROM pick_order_hist t;

关于sql - 选择具有时间格式的所有列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58042413/

相关文章:

SQL:列上的外键指向同一列

java - 有目的地避免 ArrayIndexOutOfBoundsException

java - 在java中连接2个二维数组?

sql - "Missing Keyword"在 Oracle SQL Developer 中创建表时

sql - Oracle 数据库在使用过程时无法识别类型

sql - 我可以在一个语句中删除两个表中的条目吗?

sql - 确定表是否存在的可移植 SQL?

string - 在字符串中使用字符代码

C# Oracle 存储过程参数顺序

mysql - sql mysql 有值时返回列名