我需要美国格式的日期格式,即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”作为数据类型。
我试图将上个月的日期作为最后日期,因此当前获取的格式不正确。
有任何猜想吗?
谢谢!
答案 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