无法将datetime转换为字符串SQL

时间:2016-06-15 06:03:26

标签: c# sql sql-server datetime

我想将日期时间转换为字符串。在我的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

4 个答案:

答案 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')