Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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
oracle中的EDT和EST时间戳sqlldr数据加载_Oracle_Oracle11g_Timezone_Sql Loader - Fatal编程技术网

oracle中的EDT和EST时间戳sqlldr数据加载

oracle中的EDT和EST时间戳sqlldr数据加载,oracle,oracle11g,timezone,sql-loader,Oracle,Oracle11g,Timezone,Sql Loader,我在通过sqlloader将数据从平面文件加载到带有时间戳列的Oracle数据库时遇到问题。 问题是我有一个EST和EDT的数据,如下面提到的格式 测试数据.dat Thu Mar 07 14:27:14 EST 2013 Thu Mar 07 14:27:27 EST 2013 Tue Apr 09 18:20:54 EDT 2013 Tue Apr 09 18:24:26 EDT 2013 我的sqldrfile.ctl代码如下 LOAD DATA INFILE 'test_data.da

我在通过sqlloader将数据从平面文件加载到带有时间戳列的Oracle数据库时遇到问题。 问题是我有一个EST和EDT的数据,如下面提到的格式

测试数据.dat

Thu Mar 07 14:27:14 EST 2013
Thu Mar 07 14:27:27 EST 2013
Tue Apr 09 18:20:54 EDT 2013
Tue Apr 09 18:24:26 EDT 2013
我的sqldrfile.ctl代码如下

LOAD DATA
INFILE 'test_data.dat'
TRUNCATE
INTO TABLE MY_TABLE    FIELDS TERMINATED BY '|'
TRAILING NULLCOLS
(
        "DOC_DATE_ADDED" TIMESTAMP WITH TIME ZONE "DY MON DD HH24:MI:SS TZR YYYY",
)
拒绝了\u数据。错误以下两条记录未被识别并进入错误文件

Tue Apr 09 18:20:54 EDT 2013
Tue Apr 09 18:24:26 EDT 2013

其他两条EST记录已正确加载到oracle表中。。我需要一个sqlldr代码来加载时间戳EST和EDT。请给我介绍一下(

EDT
ist不是有效的时区region,这是时区的缩写

有效区域如下所示:

SELECT * 
FROM V$TIMEZONE_NAMES
WHERE TZNAME = TZABBREV;

TZNAME  TZABBREV
======================
CET     CET
CST     CST
EET     EET
EST     EST
GMT     GMT
HST     HST
MET     MET
MST     MST
PST     PST
WET     WET
您通过此查询看到的原因。
EDT
可能表示UTC-04:00到UTC-06:00之间的几个不同时区

SELECT TZNAME, TZ_OFFSET(TZNAME)
FROM V$TIMEZONE_NAMES
WHERE TZABBREV = 'EDT'
ORDER BY 2;

TZNAME                          TZ_OFFSET(TZNAME)
------------------------------- -----------------
America/Santo_Domingo                    -04:00           
America/Fort_Wayne                       -05:00           
America/Grand_Turk                       -05:00           
America/Indiana/Indianapolis             -05:00           
America/Indiana/Marengo                  -05:00           
America/Indiana/Petersburg               -05:00           
US/Michigan                              -05:00           
America/Detroit                          -05:00           
US/Eastern                               -05:00           
America/Indiana/Vevay                    -05:00           
America/Indiana/Vincennes                -05:00           
America/Indiana/Winamac                  -05:00           
America/Indianapolis                     -05:00           
America/Iqaluit                          -05:00           
America/Jamaica                          -05:00           
America/Kentucky/Louisville              -05:00           
America/Kentucky/Monticello              -05:00           
America/Louisville                       -05:00           
America/Montreal                         -05:00           
America/Nassau                           -05:00           
America/New_York                         -05:00           
America/Nipigon                          -05:00           
America/Pangnirtung                      -05:00           
America/Port-au-Prince                   -05:00           
America/Thunder_Bay                      -05:00           
America/Toronto                          -05:00           
Canada/Eastern                           -05:00           
EST5EDT                                  -05:00           
Jamaica                                  -05:00           
US/East-Indiana                          -05:00           
America/Cancun                           -06:00           
America/Indiana/Tell_City                -06:00           

32 rows selected.

我假设您必须修改您的文本文件。我不知道sqlloader是否支持任何联机转换,例如从
EST
EST5EDT
EDT
不是有效的时区区域,这是时区缩写

有效区域如下所示:

SELECT * 
FROM V$TIMEZONE_NAMES
WHERE TZNAME = TZABBREV;

TZNAME  TZABBREV
======================
CET     CET
CST     CST
EET     EET
EST     EST
GMT     GMT
HST     HST
MET     MET
MST     MST
PST     PST
WET     WET
您通过此查询看到的原因。
EDT
可能表示UTC-04:00到UTC-06:00之间的几个不同时区

SELECT TZNAME, TZ_OFFSET(TZNAME)
FROM V$TIMEZONE_NAMES
WHERE TZABBREV = 'EDT'
ORDER BY 2;

TZNAME                          TZ_OFFSET(TZNAME)
------------------------------- -----------------
America/Santo_Domingo                    -04:00           
America/Fort_Wayne                       -05:00           
America/Grand_Turk                       -05:00           
America/Indiana/Indianapolis             -05:00           
America/Indiana/Marengo                  -05:00           
America/Indiana/Petersburg               -05:00           
US/Michigan                              -05:00           
America/Detroit                          -05:00           
US/Eastern                               -05:00           
America/Indiana/Vevay                    -05:00           
America/Indiana/Vincennes                -05:00           
America/Indiana/Winamac                  -05:00           
America/Indianapolis                     -05:00           
America/Iqaluit                          -05:00           
America/Jamaica                          -05:00           
America/Kentucky/Louisville              -05:00           
America/Kentucky/Monticello              -05:00           
America/Louisville                       -05:00           
America/Montreal                         -05:00           
America/Nassau                           -05:00           
America/New_York                         -05:00           
America/Nipigon                          -05:00           
America/Pangnirtung                      -05:00           
America/Port-au-Prince                   -05:00           
America/Thunder_Bay                      -05:00           
America/Toronto                          -05:00           
Canada/Eastern                           -05:00           
EST5EDT                                  -05:00           
Jamaica                                  -05:00           
US/East-Indiana                          -05:00           
America/Cancun                           -06:00           
America/Indiana/Tell_City                -06:00           

32 rows selected.

我假设您必须修改文本文件。我不知道sqlloader是否支持任何在线转换,例如从
EST
EST5EDT

如果您无法更改文件中数据的格式,并且在加载文件之前无法操作该文件,则可以使用区域值替换特定的EDT值
US/EARTH>(或任何合适的值,如
美国/纽约
),带有:

(为了可读性,分为两行,但也可以在控制文件中这样做)

加载示例数据文件时,表包含:

select to_char(doc_date_added, 'YYYY-MM-DD HH24:MI:SS TZD') as TZD,
   to_char(doc_date_added, 'YYYY-MM-DD HH24:MI:SS TZR') as TZR
from my_table;

TZD                     TZR                          
----------------------- ------------------------------
2013-03-07 14:27:14 EST 2013-03-07 14:27:14 EST        
2013-03-07 14:27:27 EST 2013-03-07 14:27:27 EST        
2013-04-09 18:20:54 EDT 2013-04-09 18:20:54 US/EASTERN 
2013-04-09 18:24:26 EDT 2013-04-09 18:24:26 US/EASTERN 
…因此,您保留了EST/EDT分割;尽管
TZR
显示了
US/EASTERN
EST
,因此最好也更改
EST
值,使用嵌套的
替换
或使用:

"DOC_DATE_ADDED" TIMESTAMP WITH TIME ZONE "DY MON DD HH24:MI:SS TZR YYYY"
  "REGEXP_REPLACE(:DOC_DATE_ADDED, 'E[SD]T', 'US/Eastern')"
或者,如果所有值始终为EST/EDT,则可以显式执行时间戳转换,只需剪切给定的实际字符串:

"DOC_DATE_ADDED" CHAR "FROM_TZ(TO_TIMESTAMP(SUBSTR(:DOC_DATE_ADDED, 1, 19)
  || SUBSTR(:DOC_DATE_ADDED, 25, 29), 'DY MON DD HH24:MI:SS YYYY'), 'US/Eastern')"
将您的数据加载为:

TZD                     TZR                          
----------------------- ------------------------------
2013-03-07 14:27:14 EST 2013-03-07 14:27:14 US/EASTERN 
2013-03-07 14:27:27 EST 2013-03-07 14:27:27 US/EASTERN 
2013-04-09 18:20:54 EDT 2013-04-09 18:20:54 US/EASTERN 
2013-04-09 18:24:26 EDT 2013-04-09 18:24:26 US/EASTERN 

这样做的危险在于,如果您在不同的时区获得一个值,它将针对错误的区域进行无声记录,而第一个版本将成功处理它或拒绝它,这取决于它是否被识别(即在Wernfried的第一个列表中).

如果您无法更改文件中数据的格式,并且无法在加载文件之前对其进行操作,则可以将特定EDT值替换为区域值
US/Eastern
(或任何合适的值,如
America/New_York
):

(为了可读性,分为两行,但也可以在控制文件中这样做)

加载示例数据文件时,表包含:

select to_char(doc_date_added, 'YYYY-MM-DD HH24:MI:SS TZD') as TZD,
   to_char(doc_date_added, 'YYYY-MM-DD HH24:MI:SS TZR') as TZR
from my_table;

TZD                     TZR                          
----------------------- ------------------------------
2013-03-07 14:27:14 EST 2013-03-07 14:27:14 EST        
2013-03-07 14:27:27 EST 2013-03-07 14:27:27 EST        
2013-04-09 18:20:54 EDT 2013-04-09 18:20:54 US/EASTERN 
2013-04-09 18:24:26 EDT 2013-04-09 18:24:26 US/EASTERN 
…因此,您保留了EST/EDT分割;尽管
TZR
显示了
US/EASTERN
EST
,因此最好也更改
EST
值,使用嵌套的
替换
或使用:

"DOC_DATE_ADDED" TIMESTAMP WITH TIME ZONE "DY MON DD HH24:MI:SS TZR YYYY"
  "REGEXP_REPLACE(:DOC_DATE_ADDED, 'E[SD]T', 'US/Eastern')"
或者,如果所有值始终为EST/EDT,则可以显式执行时间戳转换,只需剪切给定的实际字符串:

"DOC_DATE_ADDED" CHAR "FROM_TZ(TO_TIMESTAMP(SUBSTR(:DOC_DATE_ADDED, 1, 19)
  || SUBSTR(:DOC_DATE_ADDED, 25, 29), 'DY MON DD HH24:MI:SS YYYY'), 'US/Eastern')"
将您的数据加载为:

TZD                     TZR                          
----------------------- ------------------------------
2013-03-07 14:27:14 EST 2013-03-07 14:27:14 US/EASTERN 
2013-03-07 14:27:27 EST 2013-03-07 14:27:27 US/EASTERN 
2013-04-09 18:20:54 EDT 2013-04-09 18:20:54 US/EASTERN 
2013-04-09 18:24:26 EDT 2013-04-09 18:24:26 US/EASTERN 

这样做的危险在于,如果您在不同的时区获得一个值,它将针对错误的区域进行无声记录,而第一个版本将成功处理它或拒绝它,这取决于它是否被识别(即在Wernfried的第一个列表中).

对于来自其他国家的开发商,我想在这里引用:

东部标准时间和东部日光之间的关键区别 时间在于这样一个事实:虽然它们在同一时间被使用 分区,它们在一年中的不同时间使用

东部标准时间在秋冬季节使用 从11月的第一个星期日开始使用

东部夏时制也比东部标准时间提前一小时 时间


对EDT和EST的基本理解对于处理任何编程语言的开发时间都有很大帮助。

对于来自其他国家的开发人员,我想在这里引用:

东部标准时间和东部日光之间的关键区别 时间在于这样一个事实:虽然它们在同一时间被使用 分区,它们在一年中的不同时间使用

东部标准时间在秋冬季节使用 从11月的第一个星期日开始使用

东部夏时制也比东部标准时间提前一小时 时间

对EDT和EST的基本理解对于处理任何编程语言开发过程中的时间都有很大帮助