T-SQL SSIS 将日期时间类型导出为日期时间
T-SQL SSIS Export DateTime type to Date Time
我在 Sql Server in DateTime 类型列中有一些列,需要使用 SSIS 将它们导出为时间格式和日期格式的 csv。我可以使用 format 和 cast 使它们在查询中显示为时间和日期,如开始时间、结束时间、开始日期、结束日期列中结果的右侧部分所列。
,BEGIN_TIM [Start DTTime] --datetime
,END_TIM [End DTTime] --datetime
,BEGIN_DTE [Start DTDate] --datetime
,END_DTE [End DTDate] --datetime
,FORMAT(BEGIN_TIM, 'hh:mm tt' ) [Start Time]
,FORMAT(END_TIM, 'hh:mm tt' ) [End Time]
,cast(BEGIN_DTE as date) [Start Date]
,cast(END_DTE as date) [End Date]
结果
-- Start DTTime End DTTime Start DTDate End DTDate Start Time End Time Start Date End Date
--1900-01-01 08:30:00.000 1900-01-01 12:30:00.000 2022-05-10 00:00:00.000 2022-06-28 00:00:00.000 08:30 AM 12:30 PM 2022-05-10 2022-06-28
--1900-01-01 08:30:00.000 1900-01-01 12:30:00.000 2022-07-07 00:00:00.000 2022-08-09 00:00:00.000 08:30 AM 12:30 PM 2022-07-07 2022-08-09
--1900-01-01 08:30:00.000 1900-01-01 12:30:00.000 2022-08-03 00:00:00.000 2022-08-12 00:00:00.000 08:30 AM 12:30 PM 2022-08-03 2022-08-12
--1900-01-01 00:00:00.000 1900-01-01 12:00:00.000 2022-08-02 00:00:00.000 2022-08-12 00:00:00.000 12:00 AM 12:00 PM 2022-08-02 2022-08-12
我将这些列插入 table,然后在 SSIS 中将 OLE DB 源连接到视图。当我使用平面文件连接管理器导出列时,它们以日期时间格式出现。
平面文件连接管理器导出日期时间格式
"Start time" ,"End Time" ,"Start Date" ,"End Date"
"1900-01-01 08:30:00","1900-01-01 12:30:00","2022-05-10 00:00:00","2022-06-28 00:00:00"
如果我将高级平面文件连接管理器中的数据类型设置为 DT_DBTME DT_DBDATE,当我关闭并再次查看数据类型时它不会保存。
看来我可能需要在 Sql 服务器中使用时间数据类型和日期数据类型,或者想方设法将导出格式设置为 SSIS 中的时间和日期。这可能意味着使用派生列。
将时间列和日期列中的日期时间类型列导出到 csv 文件的最佳方法是什么?
一个解决方案-
如果我格式化用于 Ole DB 源的视图中的列,SSIS 将数据类型设置为 Unicode 字符串 DT_WSTR 并且列以正确的格式导出。
FORMAT([Start Time], 'hh:mm tt' ) [Start Time], FORMAT([End Time], 'hh:mm tt' ) [End Time],
FORMAT([Start Date], 'dd-MM-yyyy' ) [Start Date], FORMAT([End Date], 'dd-MM-yyyy' ) [End Date],
"Start time","End Time","Start Date","End Date"
"08:30 AM" ,"12:30 PM","10-05-2022","28-06-2022"
您似乎需要以特定格式导出日期和时间。当您在 select 语句中强制它们正确表示时,管道接收的元数据是数据类型为字符串 DT_STR/DT_WSTR.
至关重要。
如果这些列第一次呈现给管道时它们是日期或时间类型,则 SSIS 可能保留了元数据并隐式转换回日期时间类型。双击源和目标之间的管道将显示类型。
平面文件格式连接管理器也是如此。在这里,您希望将日期和时间列指定为字符串,因为虽然它包含日期和时间数据,但您有一个特定的格式,因此请将其保留为正确长度的字符串(和 unicode-ness)。
我在 Sql Server in DateTime 类型列中有一些列,需要使用 SSIS 将它们导出为时间格式和日期格式的 csv。我可以使用 format 和 cast 使它们在查询中显示为时间和日期,如开始时间、结束时间、开始日期、结束日期列中结果的右侧部分所列。
,BEGIN_TIM [Start DTTime] --datetime
,END_TIM [End DTTime] --datetime
,BEGIN_DTE [Start DTDate] --datetime
,END_DTE [End DTDate] --datetime
,FORMAT(BEGIN_TIM, 'hh:mm tt' ) [Start Time]
,FORMAT(END_TIM, 'hh:mm tt' ) [End Time]
,cast(BEGIN_DTE as date) [Start Date]
,cast(END_DTE as date) [End Date]
结果
-- Start DTTime End DTTime Start DTDate End DTDate Start Time End Time Start Date End Date
--1900-01-01 08:30:00.000 1900-01-01 12:30:00.000 2022-05-10 00:00:00.000 2022-06-28 00:00:00.000 08:30 AM 12:30 PM 2022-05-10 2022-06-28
--1900-01-01 08:30:00.000 1900-01-01 12:30:00.000 2022-07-07 00:00:00.000 2022-08-09 00:00:00.000 08:30 AM 12:30 PM 2022-07-07 2022-08-09
--1900-01-01 08:30:00.000 1900-01-01 12:30:00.000 2022-08-03 00:00:00.000 2022-08-12 00:00:00.000 08:30 AM 12:30 PM 2022-08-03 2022-08-12
--1900-01-01 00:00:00.000 1900-01-01 12:00:00.000 2022-08-02 00:00:00.000 2022-08-12 00:00:00.000 12:00 AM 12:00 PM 2022-08-02 2022-08-12
我将这些列插入 table,然后在 SSIS 中将 OLE DB 源连接到视图。当我使用平面文件连接管理器导出列时,它们以日期时间格式出现。
平面文件连接管理器导出日期时间格式
"Start time" ,"End Time" ,"Start Date" ,"End Date"
"1900-01-01 08:30:00","1900-01-01 12:30:00","2022-05-10 00:00:00","2022-06-28 00:00:00"
如果我将高级平面文件连接管理器中的数据类型设置为 DT_DBTME DT_DBDATE,当我关闭并再次查看数据类型时它不会保存。
看来我可能需要在 Sql 服务器中使用时间数据类型和日期数据类型,或者想方设法将导出格式设置为 SSIS 中的时间和日期。这可能意味着使用派生列。
将时间列和日期列中的日期时间类型列导出到 csv 文件的最佳方法是什么?
一个解决方案- 如果我格式化用于 Ole DB 源的视图中的列,SSIS 将数据类型设置为 Unicode 字符串 DT_WSTR 并且列以正确的格式导出。
FORMAT([Start Time], 'hh:mm tt' ) [Start Time], FORMAT([End Time], 'hh:mm tt' ) [End Time],
FORMAT([Start Date], 'dd-MM-yyyy' ) [Start Date], FORMAT([End Date], 'dd-MM-yyyy' ) [End Date],
"Start time","End Time","Start Date","End Date"
"08:30 AM" ,"12:30 PM","10-05-2022","28-06-2022"
您似乎需要以特定格式导出日期和时间。当您在 select 语句中强制它们正确表示时,管道接收的元数据是数据类型为字符串 DT_STR/DT_WSTR.
至关重要。如果这些列第一次呈现给管道时它们是日期或时间类型,则 SSIS 可能保留了元数据并隐式转换回日期时间类型。双击源和目标之间的管道将显示类型。
平面文件格式连接管理器也是如此。在这里,您希望将日期和时间列指定为字符串,因为虽然它包含日期和时间数据,但您有一个特定的格式,因此请将其保留为正确长度的字符串(和 unicode-ness)。