将日期转换为日期时间

2020-09-05 17:23发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)大家好, 在我的资料中,我有2...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

在我的资料中,我有2种日期类型为varchar(30)的不同日期格式

1.DD/MM/YYYY

2.MM/DD/YYYY HH:MM:SS AM

我的目标应采用 2.MM/DD/YYYY 的形式。 HH:MM:SS AM作为日期时间

现在,如何只选择1.DD/MM/YYYY格式并将其更改为 2.MM/DD/YYYY HH:MM:SS AM格式。

我尝试过to_char,to_date。 但是,我为此 2.MM/DD/YYYY HH:MM获取空值 :SS格式。

有人可以帮我吗?

感谢您的快速帮助。

谢谢

苏里亚

3条回答
DafaDDDa
2020-09-05 18:05

太棒了! 这有助于缩小选择范围。 不过,当您引用TO_CHAR和TO_DATE函数时,我很担心。 不幸的是,IQ中没有这些选项。

您提到"源",IQ通常意味着文件要加载数据 入。 如果不是这种情况,请告诉我,但这会解决该问题,假设您想将文件加载到具有不同格式的IQ中。 您有一个使用DMY的对象,另一个是使用MDY的对象。 使用LOAD TABLE加载数据时,我们可以指定日期顺序(Date_Order设置选项)以控制MDY,DMY,YMD等的正确日期顺序。

如果两种格式都在同一个源文件中 ,这带来了一个问题,因为我们必须知道该文件中每行的正确顺序。

重置差异不是问题。 IQ加载程序可以处理AM/PM扩展。 IQ处理仅具有日期(MDY)的数据以及具有完整时间戳的数据。 所有这些都完美地工作。 只是日期顺序是问题所在。

例如,我创建了这个示例CSV文件来说明灵活性。 它只有一个日期以及两个带AM和PM的日期时间。

 1,01/02/1903,1,
 2,01/02/1903 06:07:08 AM,2,
 3,01/02/1903 06:07:08 PM,3,
 

一个问题……当您查看该数据时,仅是数据,您能告诉我这些日期是1903年1月1日还是1903年2月1日吗? 纯粹从数据来看,您无法确定排序,这是问题的核心。 我们依靠Date_Order选项来告诉我们正确的格式,然后将该文件中的所有行都视为相同的格式。

要解决此问题,您必须在数据进入数据之前对其进行预处理。 最终的IQ表。

  1. 如果使用ETL工具,可以使用此工具。 只需使用此工具将日期设置为相同格式即可。
  2. 在加载到IQ中之前,使用sed/awk/perl/python处理文件
  3. 将日期字段加载到VARCHAR字段中 智商 在这里,您可以放置​​逻辑以更新实际日期/时间字段。 例如,如果您知道没有时间的字段是DMY(日/月/年),并且在日和月之间有一个定界符,则搜索10字节宽的字段(2个定界符,2天,2个月,4 年份)会告诉您该字段没有时间成分,并且采用DMY格式。 由于包含时间,较长的字段将采用MDY(月/日/年格式)。 根据该字段中的文本,您将使用不同的逻辑进行转换。

最后,您需要进行一些预处理,才能将数据最终存储在最终的IQ表中。 从许多年的经验中,我可以说更改数据的提取方式将是最简单的。 确保源系统以相同的方式和相同的日期顺序提取所有日期和日期时间字段。 混合MDY字段的顺序非常有问题。

如果您不能这样做,则至少将这些字段分成两个文件。 使用" DD/MM/YYYY"数据保存一个文件,使用" MM/DD/YYYY HH:MM:SS AM"数据保存一个文件。 如果这样做,则可以有2个装入语句,每个装入语句都设置了自己的Date_Order选项,这样数据就可以正确输入并且不需要进行任何其他处理。

如果要做的只是 从IQ表中选择数据并更改格式,则可能会有所帮助。

-显示没有时间的字段,因此为DMY格式
 1>从dt_test中选择*其中len(date1)<= 11
  a1 date1 a2
  ----------- ----------- -----------
            1 01/02/1903 1

 (影响1行)

 -现在,设置Date_Order以匹配当前数据(DMY)
 1>设置临时选项date_order ='DMY'

 -使用CONVERT从varchar字段(DMY)中选择数据以获取
 -到日期时间字段。
 -然后使用DATEFORMAT将其转换为MDY格式
 1>选择日期格式(convert(datetime,date1),'mm/dd/yyyy')
 2>来自dt_test,其中len(date1)<= 11
  dateformat(convert(datetime,dt_test.date1),'mm/dd/yyyy')
  --------------------------------------------------  ------
  1903年2月1日


 

标记

一周热门 更多>