我希望通过以下查询声明Month
和date
,但我得到了一些东西
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
这里有什么问题
答案 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
)时,当基本格式正常工作时,扩展格式将失败。