在SSIS中带来正确的日期格式

时间:2018-10-23 14:05:53

标签: sql-server ssis ssis-2012

我需要美国格式的日期格式,即2018年9月30日; 2018年8月31日; 7/31/2018 ..以此类推。我已将代码编写为

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

此日期为2018-09-30,格式不正确。我确实将数据类型指定为“ STRING”,因为上述代码没有将“ DATE / DATE-TIME”作为数据类型。

我试图将上个月的日期作为最后日期,因此当前获取的格式不正确。

有任何猜想吗?

谢谢!

3 个答案:

答案 0 :(得分:2)

对于这样的格式,需要从日期中提取日期部分并进行相应的串联。下面的表达式会将日期转换为DD / MM / YYYY格式。由于您仅在问题中列出了月份中的一位数字,因此本示例说明了零,并且长度会有所不同。如果要将零加到个位数的日期和月份中,则需要在日期和月份之前附加一个"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()))

答案 1 :(得分:0)

那怎么样

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;

返回

+------------+------------+
|   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;

返回

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

答案 2 :(得分:0)

您可以使用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