SSIS 将 m/dd/yyyy 转换为不一致的 yyyymmdd
SSIS Convert m/dd/yyyy to yyyymmdd with inconsistencies
我正在将许多文件加载到 SQL SERVER 数据库中。我有一个平面文件,其中日期列为 string[DT_STR]
。
我的数据库中有两个 "date fields"。一个是varchar
,一个是datetime
.
转换 datetime
列没问题,我只是在必要时使用数据 Conversion/Derived 列。但是,这个 varchar
专栏给我带来了麻烦。此列的数据库值应采用 yyyymmdd 格式。但是,在这个单个文件上,日期格式发生了变化。
通常我会在这里做一个 SUBSTRING(...)
表达式,但困难在于这些日期的格式会改变。值的一些示例可以是
08/16/2017
8/16/2017
08/6/2017
08/06/2017
10/6/2017
10/06/2017
这使挑战变得更加困难。我尝试了 LEN([DATE]) == NUM_HERE ? do_THING : OTHER_CALC
,但这种方法失败了,因为 10/6/2017
的长度与 8/06/2017
相同,这会给我错误的结果。有人对此有好的解决方法吗?
也许简单地转换成日期,然后再转换成最终格式。如果是 2012+,使用 try_convert()
来捕获任何虚假日期。
例子
Declare @YourTable Table ([SomeCol] varchar(50))
Insert Into @YourTable Values
('08/16/2017')
,('8/16/2017')
,('08/6/2017')
,('08/06/2017')
,('10/6/2017')
,('10/06/2017')
Select *
,Formatted = convert(varchar(8),convert(Date,SomeCol),112)
from @YourTable
Returns
SomeCol Formatted
08/16/2017 20170816
8/16/2017 20170816
08/6/2017 20170806
08/06/2017 20170806
10/6/2017 20171006
10/06/2017 20171006
Convert 将 varchar 数据转换为日期时间并将其转换为格式化字符串
SELECT CONVERT(varchar,(CONVERT(datetime, '8/6/2017')),112)
我正在将许多文件加载到 SQL SERVER 数据库中。我有一个平面文件,其中日期列为 string[DT_STR]
。
我的数据库中有两个 "date fields"。一个是varchar
,一个是datetime
.
转换 datetime
列没问题,我只是在必要时使用数据 Conversion/Derived 列。但是,这个 varchar
专栏给我带来了麻烦。此列的数据库值应采用 yyyymmdd 格式。但是,在这个单个文件上,日期格式发生了变化。
通常我会在这里做一个 SUBSTRING(...)
表达式,但困难在于这些日期的格式会改变。值的一些示例可以是
08/16/2017
8/16/2017
08/6/2017
08/06/2017
10/6/2017
10/06/2017
这使挑战变得更加困难。我尝试了 LEN([DATE]) == NUM_HERE ? do_THING : OTHER_CALC
,但这种方法失败了,因为 10/6/2017
的长度与 8/06/2017
相同,这会给我错误的结果。有人对此有好的解决方法吗?
也许简单地转换成日期,然后再转换成最终格式。如果是 2012+,使用 try_convert()
来捕获任何虚假日期。
例子
Declare @YourTable Table ([SomeCol] varchar(50))
Insert Into @YourTable Values
('08/16/2017')
,('8/16/2017')
,('08/6/2017')
,('08/06/2017')
,('10/6/2017')
,('10/06/2017')
Select *
,Formatted = convert(varchar(8),convert(Date,SomeCol),112)
from @YourTable
Returns
SomeCol Formatted
08/16/2017 20170816
8/16/2017 20170816
08/6/2017 20170806
08/06/2017 20170806
10/6/2017 20171006
10/06/2017 20171006
Convert 将 varchar 数据转换为日期时间并将其转换为格式化字符串
SELECT CONVERT(varchar,(CONVERT(datetime, '8/6/2017')),112)