我想将这些数据插入到表格中。示例数据MM/DD/YYYY
+ 1天和12:00:00 PM
基本上我需要的是插入当前日期+ 1天和特定时间12:00:00 PM。
我的代码是:
DECLARE @MyEstimatedDate as varchar(100) ---TEMPORARY CONTAINER
DECLARE @MyEstimatedDate1 as varchar(100) ---TEMPORARY CONTAINER
DECLARE @MyEstimatedDate2 as varchar(100) ---TEMPORARY CONTAINER
DECLARE @MyEstimatedDate3 as DATETIME ---FINAL DATA NEEDED. This is the data I want inserted.
SET @MyEstimatedDate = DATEADD(day,1,GETDATE())
SET @MyEstimatedDate1 = CONVERT(VARCHAR(100),@MyEstimatedDate,101)
SET @MyEstimatedDate2 = @MyEstimatedDate1 + ' 12:00:00 PM'
SET @MyEstimatedDate3 = cast(@MyEstimatedDate2 as datetime) ---I believe this is the error
我收到错误消息:
将char数据类型转换为日期时间数据类型会导致日期时间值超出范围。
答案 0 :(得分:2)
操纵varchar
数据时,请勿使用datetime
。 SQL Server 2005提供enough tools,以便您能够避免转换。
以下是从datetime
值中删除时间部分的known method或多或少DATEDIFF
:
SELECT DATEADD(DAY, DATEDIFF(DAY, 0, @InputDateTime), 0);
在上面的示例中,DATEADD
计算指定为0
的日期与给定日期之间的天数。然后,{{3}}函数会将天数添加到0
日期。最终结果是datetime
值,时间为00:00:00
,日期与@InputDateTime
相同。这是因为0
日期是1900-01-01 00:00:00
的整数表示:它的时间部分为零,因为我们将它增加了一整天,所以结果的时间部分也是如此。
现在,如果您添加DATEDIFF
而不是DATEDIFF+1
天,您将在第二天获得。此外,如果您使用0
代替12:00
作为要递增的日期,您将获得第二天的中午,这似乎是您想要的。所以,最终的表达式将如下所示:
SELECT DATEADD(DAY, DATEDIFF(DAY, 0, @InputDateTime) + 1, '12:00');
由于您的输入时间戳应该是当前日期&时间,只需将@InputDateTime
替换为GETDATE()
:
SELECT DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()) + 1, '12:00');
答案 1 :(得分:0)
为什么不简单地做
cast(dateadd(day, 1, getdate()) as date)
那是午夜。中午,这样做
dateadd(hour, 12, cast(cast(dateadd(day, 1, getdate()) as date) as datetime))
忘了以上,这是错误的。
正确答案是
dateadd(hour, 12, cast(cast(dateadd(day, 1, getdate()) as date) as datetime))
这次我甚至测试了它。
答案 2 :(得分:0)
日期时间类型包含日期+时间。在你的情况下@ MyEstimatedDate1需要一个日期
DECLARE @MyEstimatedDate varchar(100) ---TEMPORARY CONTAINER
DECLARE @MyEstimatedDate1 varchar(100) ---TEMPORARY CONTAINER
DECLARE @MyEstimatedDate2 varchar(100) ---TEMPORARY CONTAINER
DECLARE @MyEstimatedDate3 DATETIME ---FINAL DATA NEEDED. This is the data I want inserted.
SET @MyEstimatedDate = DATEADD(day, 1, GETDATE())
SET @MyEstimatedDate1 = CONVERT(VARCHAR(100), CAST(@MyEstimatedDate AS date), 101)
SET @MyEstimatedDate2 = @MyEstimatedDate1 + ' 12:00:00 PM'
SET @MyEstimatedDate3 = cast(@MyEstimatedDate2 as datetime) ---I believ
或者简单易用
SELECT DATEADD(hour, 36, GETDATE() - CAST(GETDATE() AS time))