想要打印声明的日期和月份

时间:2016-01-01 12:37:11

标签: sql sql-server-2005

我希望通过以下查询声明Monthdate,但我得到了一些东西

Jul 21 1905 12:00AM

我希望它为

Dec 31 2015

下面是我的查询

declare @actualMonth int 
  declare @actualYear int
set  @actualYear = 2015
set @actualMonth = 12
 DECLARE @DATE DATETIME
SET @DATE = CAST(@actualYear +'-' + @actualMonth AS datetime) 
 print  @DATE

这里有什么问题

4 个答案:

答案 0 :(得分:3)

这将为您提供预期的输出

DECLARE @actualMonth INT 
DECLARE @actualYear INT
SET @actualYear = 2015
SET @actualMonth = 12
DECLARE @DATE DATETIME;
SET @DATE = CAST(
        CAST(@actualYear AS VARCHAR)+'-'+CAST(@actualMonth AS VARCHAR)+'-'+'31' 
        AS DATETIME
    );

PRINT Convert(varchar(11),@DATE,109)

试试这个,

SET @DATE = CAST(
        CAST(@actualYear AS VARCHAR)+'-'+CAST(@actualMonth AS VARCHAR)+'-'+ Cast(Day(DATEADD(DAY,-1,DATEADD(month,@actualMonth,DATEADD(year,@actualYear-1900,0)))) AS VARCHAR)
        AS DATETIME
    );

或者这个,

SET @DATE = CAST(
        CAST(@actualYear AS VARCHAR)+'-'+CAST(@actualMonth AS VARCHAR)+'-'+'01' 
        AS DATETIME
    );

PRINT CONVERT(VARCHAR(11), DATEADD(D, -1, DATEADD(M, 1, @DATE)), 109)

答案 1 :(得分:1)

实际上你是realMonth和actualYear并且转换为datetime它会给出其他结果 试试这个

Users::SessionsController

答案 2 :(得分:1)

您应该将这些月份和年份转换为varchar,然后将最终结果转换为datetime。它应该是

DECLARE @DATE DATETIME;

SET @DATE = CAST(CAST(@actualYear AS VARCHAR) + '-' + CAST(@actualMonth AS VARCHAR) + '-' + '31' AS DATETIME);

答案 3 :(得分:1)

看起来并非如此微不足道。你应该处理每个月的正确的最后几天。

DECLARE @actualMonth int 
DECLARE @actualYear int
SET @actualYear = 2016
SET @actualMonth = 2
DECLARE @tmpDate DATETIME

SET @tmpDate = CAST(CAST(@actualYear AS VARCHAR) + RIGHT('0' + CAST(@actualMonth AS VARCHAR), 2) + '01' AS DATETIME);
SELECT CONVERT(varchar(11), DATEADD(d, -1, DATEADD(m, 1, @tmpDate)), 100)

<强>更新

好的,我会尝试更深入地解释问题。

ISO 8601的扩展(由@rajeshpanchal使用)和基本(由我使用)格式有什么不同?

实际上,SQL Server将基本和扩展格式中指定的日期(日期时间)视为DATEFORMAT设置的不同。

看看这段代码:

Declare @str1 varchar(8) = '20160121'
Declare @str2 varchar(10) = '2016-01-21'

Declare @dt1 datetime
Declare @dt2 datetime
--set dateformat ydm ---- 1
set dateformat ymd   -----2
set @dt1 = @str1
set @dt2 = @str2
select @dt1
select @dt2

此代码可以正常使用。但是当您首先取消注释并将第二个set dateformat注释(dateformat设置为ydm)时,当基本格式正常工作时,扩展格式将失败。