Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 正确使用日期和时间戳Oracle数据类型_Sql_Oracle_Plsql_Sql Timestamp - Fatal编程技术网

Sql 正确使用日期和时间戳Oracle数据类型

Sql 正确使用日期和时间戳Oracle数据类型,sql,oracle,plsql,sql-timestamp,Sql,Oracle,Plsql,Sql Timestamp,发现很难在脚本中格式化日期和时间戳 v_date1 Date; v_date2 timestamp; 假设我创建了一个_日期字段,其值为“31-03-2017 18:02:05” select c1 into v_date1 from table_a; 给我——‘2017年3月31日’ 给我-'31-03-2017 06:02:05 PM' 我试图通过游标获取数据,从而对其进行迭代以进行少量验证 如何确保VXDATE2只考虑日期和时间? 请提供帮助。日期数据类型将存储日期和时间戳。然而,时间

发现很难在脚本中格式化日期和时间戳

v_date1 Date;
v_date2 timestamp;
假设我创建了一个_日期字段,其值为“31-03-2017 18:02:05”

select c1 into v_date1 from table_a;
给我——‘2017年3月31日’

给我-'31-03-2017 06:02:05 PM'

我试图通过游标获取数据,从而对其进行迭代以进行少量验证

如何确保VXDATE2只考虑日期和时间?


请提供帮助。

日期
数据类型将存储日期和时间戳。然而,时间戳数据类型也将存储几秒钟

您没有看到
DATE
数据类型的时间的原因是您的NLS设置。把它们改成下面的

ALTER SESSION SET nls_date_format='DD-MM-YYYY HH24:MI:SS';
ALTER SESSION SET NLS_TIMESTAMP_FORMAT='DD-MM-RR HH24.MI.SSXFF';

仅当代码中的秒数很重要时,才使用时间戳。日期将用于任何其他用途

我想你误解了日期和时间戳

select c1 into v_date1 from table_a; 
给你一个日期对象

v_date2 timestamp;
给你一个时间戳对象

这两个对象都包含日期和时间组件。时间戳也包含更详细的信息(第二信息的一部分)

如果你只想要日期,你可以使用一些内置函数

有关完整信息

select systimestamp from dual;
select sysdate from dual;
但是请注意,您的查询环境可能不会根据其设置显示完整的日期信息

要删除时间组件

select trunc(systimestamp) from dual;
select trunc(sysdate) from dual;
还是为了更好的控制

select trunc(systimestamp, 'dd') from dual;
select trunc(sysdate, 'dd') from dual;
其中,如果要获取一年中的第一天,则可以将“dd”替换为其他值,如“yyyy”,或将“mm”替换为月份的第一天

或舍入而不是删除(同样,可选值和日期为默认值)

然而,所有这些函数仍然返回数据/时间戳值,因此它们仍然包含时间信息——它只是被操纵的

如果您只需要一个字符串,其中包含您需要使用的日期

select to_char(systimestamp, 'dd-mm-yyyy') from dual;
select to_char(sysdate, 'dd-mm-yyyy') from dual;

使用您喜欢的日期格式。

要了解这种差异,您需要首先了解会话nls设置是如何工作的

SQL> @C:\Users\44011713\Desktop\so_test.sql
SQL> SET SQLBL ON;
SQL> SET ECHO ON;
SQL> SET FEEDBACK ON;
SQL> 
SQL> 
SQL> --To understand this differenence you need to first understand how session nls settings work.
SQL> 
SQL> SELECT * FROM nls_session_parameters
  2  where parameter = 'NLS_DATE_FORMAT';

PARAMETER                                                                       
--------------------------------------------------------------------------------
VALUE                                                                           
--------------------------------------------------------------------------------
NLS_DATE_FORMAT                                                                 
MM/DD/YYYY                                                                      


1 row selected.

SQL> 
SQL> 
SQL> SELECT CURRENT_DATE FROM DUAL;

CURRENT_DA                                                                      
----------                                                                      
03/22/2017                                                                      

1 row selected.

SQL> -- Since we are fetcing date value and the session format mask is MM/DD/YYYY so the output --will be aligning to this format only
SQL> 
SQL> SELECT * FROM nls_session_parameters
  2  where parameter = 'NLS_TIMESTAMP_FORMAT';

PARAMETER                                                                       
--------------------------------------------------------------------------------
VALUE                                                                           
--------------------------------------------------------------------------------
NLS_TIMESTAMP_FORMAT                                                            
MM/DD/YYYY HH24:MI:SS.FF6                                                       


1 row selected.

SQL> 
SQL> 
SQL> ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'MM/DD/YYYY HH24:MI:SS.FF6';

Session altered.

SQL> 
SQL> SELECT LOCALTIMESTAMP FROM DUAL;

LOCALTIMESTAMP                                                                  
---------------------------------------------------------------------------     
03/22/2017 09:53:54.133795                                                      

1 row selected.

SQL> -- Since we are fetcing date value and the session format mask is MM/DD/YYYY --HH24:MI:SS.FF6 so the output will be aligning to this format only
SQL> 
SQL> --Now lets tweak some settings :P
SQL> 
SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'MM/DD/YYYY HH24:MI:SS';

Session altered.

SQL> 
SQL> SELECT CURRENT_DATE FROM DUAL;

CURRENT_DATE                                                                    
-------------------                                                             
03/22/2017 09:53:54                                                             

1 row selected.

SQL> -- And now the format aligns to the forced the setting done by ALTER SESSION.
SQL> 
SQL> -- So above example illustrates how the the format ca be changed for session
SQL> 
SQL> --Hope this helps.
SQL> spool off;

通常,时间戳存储的信息与日期类型和七个分数相同。若您在db客户机中设置了差异,那个么它只是格式化。
select to_char(systimestamp, 'dd-mm-yyyy') from dual;
select to_char(sysdate, 'dd-mm-yyyy') from dual;
SQL> @C:\Users\44011713\Desktop\so_test.sql
SQL> SET SQLBL ON;
SQL> SET ECHO ON;
SQL> SET FEEDBACK ON;
SQL> 
SQL> 
SQL> --To understand this differenence you need to first understand how session nls settings work.
SQL> 
SQL> SELECT * FROM nls_session_parameters
  2  where parameter = 'NLS_DATE_FORMAT';

PARAMETER                                                                       
--------------------------------------------------------------------------------
VALUE                                                                           
--------------------------------------------------------------------------------
NLS_DATE_FORMAT                                                                 
MM/DD/YYYY                                                                      


1 row selected.

SQL> 
SQL> 
SQL> SELECT CURRENT_DATE FROM DUAL;

CURRENT_DA                                                                      
----------                                                                      
03/22/2017                                                                      

1 row selected.

SQL> -- Since we are fetcing date value and the session format mask is MM/DD/YYYY so the output --will be aligning to this format only
SQL> 
SQL> SELECT * FROM nls_session_parameters
  2  where parameter = 'NLS_TIMESTAMP_FORMAT';

PARAMETER                                                                       
--------------------------------------------------------------------------------
VALUE                                                                           
--------------------------------------------------------------------------------
NLS_TIMESTAMP_FORMAT                                                            
MM/DD/YYYY HH24:MI:SS.FF6                                                       


1 row selected.

SQL> 
SQL> 
SQL> ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'MM/DD/YYYY HH24:MI:SS.FF6';

Session altered.

SQL> 
SQL> SELECT LOCALTIMESTAMP FROM DUAL;

LOCALTIMESTAMP                                                                  
---------------------------------------------------------------------------     
03/22/2017 09:53:54.133795                                                      

1 row selected.

SQL> -- Since we are fetcing date value and the session format mask is MM/DD/YYYY --HH24:MI:SS.FF6 so the output will be aligning to this format only
SQL> 
SQL> --Now lets tweak some settings :P
SQL> 
SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'MM/DD/YYYY HH24:MI:SS';

Session altered.

SQL> 
SQL> SELECT CURRENT_DATE FROM DUAL;

CURRENT_DATE                                                                    
-------------------                                                             
03/22/2017 09:53:54                                                             

1 row selected.

SQL> -- And now the format aligns to the forced the setting done by ALTER SESSION.
SQL> 
SQL> -- So above example illustrates how the the format ca be changed for session
SQL> 
SQL> --Hope this helps.
SQL> spool off;