我正在尝试以下查询以获取订单和订单日期为“Mon Jan 01 12:55:55 2016 IST”格式,其中IST是印度标准时间,但我能够得到“Mon Jan 01 12: 2016年55:55“。
我不知道如何获得时区。我的意思是必须传递哪个参数来获取它。你能帮我解决这个问题。
SELECT ORDERID AS ORD_ID, TO_CHAR(ORDERDATE, 'Dy Mon dd HH24:MI:SS yyyy') AS ORDER_DATE
FROM ORDER
由于 Hanumanth Reddy。
答案 0 :(得分:1)
这取决于列ORDERDATE
的数据类型。数据类型DATE
或TIMESTAMP
不包含任何时区信息。在这种情况下,您只能将IST
作为静态文本附加,例如像这样。
SELECT ORDERID AS ORD_ID,
TO_CHAR(ORDERDATE, 'Dy Mon dd HH24:MI:SS yyyy')||' IST' AS ORDER_DATE
FROM ORDER;
SELECT ORDERID AS ORD_ID,
TO_CHAR(ORDERDATE, 'Dy Mon dd HH24:MI:SS yyyy "IST"') AS ORDER_DATE
FROM ORDER;
如果ORDERDATE
的数据类型为TIMESTAMP
,您还可以附加时区并将其用于输出:
SELECT ORDERID AS ORD_ID,
TO_CHAR(FROM_TZ(ORDERDATE , 'Asia/Calcutta'), 'Dy Mon dd HH24:MI:SS yyyy TZD') AS ORDER_DATE
FROM ORDER;
ALTER SESSION SET TIME ZONE = 'Asia/Calcutta';
SELECT ORDERID AS ORD_ID,
TO_CHAR(ORDERDATE AT LOCAL, 'Dy Mon dd HH24:MI:SS yyyy TZD') AS ORDER_DATE
FROM ORDER;
如果ORDERDATE
的数据类型为TIMESTAMP WITH TIME ZONE
,您可以执行以下操作:
ALTER SESSION SET TIME ZONE = 'Asia/Calcutta';
SELECT ORDERID AS ORD_ID,
TO_CHAR(ORDERDATE, 'Dy Mon dd HH24:MI:SS yyyy TZD') AS ORDER_DATE
FROM ORDER;
请注意,除了上一次查询外,只有当ORDERDATE
中的值存储为“亚洲/加尔各答”时,所有这些内容才能正常运行。时间。
另请注意,您无法制作ALTER SESSION SET TIME ZONE = 'IST';
或FROM_TZ(ORDERDATE, 'IST')
。 IST 也可能意味着"以色列标准时间"或者"冰岛标准时间" (甚至可能更多),因此您将在Oracle中遇到错误。如果您的数据库中安装了最近的时区文件,时区名称Asia/Kolkata
也可以。