在 SSIS 中引入正确的日期格式

Bring correct date format in SSIS

我需要美国格式的日期格式,即 9/30/2018; 2018 年 8 月 31 日; 7/31/2018 .. 在 SSIS 中依此类推。我写的代码格式为

LEFT((DT_STR,50,1252)DATEADD("d",-DAY(GETDATE()),GETDATE()),10)

这是 2018-09-30 中的日期,格式不正确。我确实将数据类型指定为 "STRING",因为上面的代码没有将 "DATE/DATE-TIME" 作为数据类型。

我正在尝试将上个月的最后日期带入最后一个日期,因此当前获取的格式不正确。

有什么猜测吗?

谢谢!

对于这样的格式,需要从日期中提取日期部分并相应地连接起来。下面的表达式会将日期转换为 DD/MM/YYYY 格式。由于您在问题中只列出了月份的个位数,因此此示例 not 不考虑零,并且长度会有所不同。如果您希望在个位数的日期和月份中添加零,则需要在日期和月份之前附加 "0"(带引号)。

RIGHT((DT_STR, 2, 1252) DATEPART("MM", DATEADD("D",-DAY(GETDATE()),GETDATE())), 2) 
+ "/" + RIGHT((DT_STR, 2, 1252) DATEPART("DD", DATEADD("D",-DAY(GETDATE()),GETDATE())), 2) 
+ "/" +  (DT_STR, 4, 1252) DATEPART("YYYY", DATEADD("D",-DAY(GETDATE()),GETDATE()))

那个怎么样

DECLARE @AsStr  VARCHAR(10) = '2018-09-30', --If you store it as string
        @AsDate DATE = '2018-09-30'; --If you store it as date

SELECT CONVERT(VARCHAR(10), @AsDate, 101) AsStr,
       CONVERT(VARCHAR(10), CAST(@AsStr AS DATE), 101)  AsDate;

Returns

+------------+------------+
|   AsStr    |   AsDate   |
+------------+------------+
| 09/30/2018 | 09/30/2018 |
+------------+------------+

或者您可以使用 FORMAT() 函数作为

SELECT
       FORMAT(CAST(@AsStr AS DATE), 'MM/dd/yyyy') FormatStr,
       FORMAT(@AsDate, 'MM/dd/yyyy') FormatDate;

Returns

+------------+------------+
| FormatStr  | FormatDate |
+------------+------------+
| 09/30/2018 | 09/30/2018 |
+------------+------------+

您可以使用 DATEFROMPARTS 相当轻松地获得该月的第一天。然后,你可以使用DATEADD减去一天,然后CONVERT输出101格式,格式为MM/DD/YYYY。

例如:

DECLARE @DT_STR Date = '2018-10-23'
SELECT CONVERT(varchar, DATEADD(DAY, -1, DATEFROMPARTS(YEAR(@DT_STR), MONTH(@DT_STR), 1)), 101) AS [answer]

产生输出:

answer
09/30/2018