我想将日期时间转换为字符串。在我的SQL查询中,我有一个日期“2016/06/15”。有了这个日期,我将它减去一个月“2016/05/15”。 我得到了这部分工作。但是,当我尝试将其转换为字符串(varchar或nvarchar)时,我遇到以下异常。 从字符串转换日期时间时转换失败。我不知道如何解决这个问题,帮助将不胜感激。
这是我的查询
Declare @date as datetime
Set @date = GetDate()
print @date
Declare @dateMinusOneMonth as datetime
Set @dateMinusOneMonth = GetDate()
Set @dateMinusOneMonth = Convert(nvarchar, Convert(nvarchar(3), DateAdd(month, -1, @date)), 101)
print @dateMinusOneMonth
答案 0 :(得分:3)
您将@dateMinusOneMonth
声明为datetime
。这样做:
Declare @dateMinusOneMonth as nvarchar(20)
Set @dateMinusOneMonth = Convert(nvarchar, Convert(nvarchar(3), DateAdd(month, -1, @date)), 101)
答案 1 :(得分:2)
@dateMinusOneMonth
的类型为datetime
,您尝试为其分配varchar
无效的值。
您可以将其转换为print
,如下所示
Set @dateMinusOneMonth = DateAdd(month, -1, @date)
print Convert(nvarchar, Convert(nvarchar(3), DateAdd(month, -1, @dateMinusOneMonth)), 101)
答案 2 :(得分:1)
让我们首先关注将其转换为VARCHAR / NVARCHAR。只需传递这样的变量:
DECLARE @Time DATE
SET @Time = CAST(DATEADD(MM, -1, GETDATE() ) AS DATE )
SELECT CAST(@TIME AS VARCHAR(10) )
看看这有多容易?
结果:2016-05-14
请注意,您的数据库可能设置不同,您应该正确测试或格式化日期。 最后,如果您使用TRY_CONVERT(),答案将返回NULL而不是使整个代码失败。
答案 3 :(得分:0)
您可以轻松地在一行中完成所有操作。此外,我不想通过转换查找101,102,113等日期字符串格式。看到你提到c#,如果你在SQL 2012或更新,只需像在c#中那样使用FORMAT。
PRINT FORMAT(DATEADD(MONTH,-1,GETDATE()), 'yyyy/MM/dd')