我有一个 .txt 平面文件源。我将其导入 ssis 进行一些验证、操作以生成 .csv 文件。因此:日期以字符串形式输入,需要以字符串形式输出,输出不是数据库,而是由数据导入工具加载的 csv。
我需要将某些日期列的 yyyy-mm-dd 中的日期格式转换为 mm/dd/yyyy 。例如:DOB 列的日期为 1984-03-16 需要转换为 03/16/1984。我正在使用派生列转换,但无法弄清楚。
不清楚原始列是
DATE
还是字符串。这是一个示例,演示了根据要求转换两者的日期:
DECLARE @t TABLE(d DATE, s CHAR(10));
INSERT @t VALUES('1984-03-16', '1984-03-16');
SELECT d,
CONVERT(CHAR(10), d, 101),
CONVERT(DATE, s),
CONVERT(CHAR(10), CONVERT(DATE, s), 101)
FROM @t;
结果:
1984-03-16 03/16/1984 1984-03-16 03/16/1984
^^^^^^^^^^ date ^^^^^^^^^^ string ^^^^^^^^^^ date ^^^^^^^^^^ string
如果您将其存储为字符串,那么您确实不应该这样做。当您为您认为需要的数据选择错误的数据类型(例如格式)时,您会丢失各种重要的东西。验证是最重要的 - 如果您使用
CHAR(10)
表示 YYYY-MM-DD
日期,那么是什么阻止某人输入 9999-99-99
或 yeah-no-go
?
无论如何,这是一项格式化作业,在消耗此数据的另一端可以更好地处理。在将其打印在纸上或显示在报告上之前,绝对没有理由采用日期或日期时间值并强制其像字符串一样工作。即使在演示方面,我也质疑呈现像
mm/dd/yyyy
这样的区域性、模糊性格式是否明智。您确定您的所有观众(现在和未来)都明白 09/06/2013
是 9 月 6 日而不是 6 月 9 日吗?您想在英国或加拿大有朋友来运营吗?
假设您的日期列名为 DateCol
您将需要从该列创建三个派生列,然后像这样简单地将它们连接起来
derivedColumns Expression
year SUBSTRING(DateCol, 1, 4)
day RIGHT(DateCol, 2)
Month SUBSTRING(DateCol, 6, 2)
NewDate SUBSTRING(DateCol, 6, 2) + "/" + RIGHT(DateCol, 2)+ "/"+SUBSTRING(DateCol, 1, 4)
您的新日期列将采用您想要的格式