Sql server Varchar DateTime Column 添加 Day to Date 怎么办?
Posted
技术标签:
【中文标题】Sql server Varchar DateTime Column 添加 Day to Date 怎么办?【英文标题】:Sql server Varchar DateTime Column add Day to Date how to? 【发布时间】:2015-09-15 13:49:50 【问题描述】:我在 SQL Server 上有一个 Varchar 日期时间列。 我需要将 5 天添加到用户最后日期。
我试过了
" UPDATE [dbo].[infoTbl] SET lastDate convert(DATEADD (dd, 5, lastDate)) "
" UPDATE [dbo].[infoTbl] SET lastDate DATEADD (dd, 5, lastDate) "
" UPDATE [dbo].[infoTbl] SET lastDate convert(DATEADD (d, 5, CAST(@lastDate AS datetime)) AS varchar(10)) "
错误:将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。
我的旧日期值是:20.09.2015 10:14
我在 Godaddy 上重新构建数据库,新值是:
2015-09-15 04:52:52.723
【问题讨论】:
UPDATE [dbo].[infoTbl] SET lastDate= cast(DATEADD(d, 5, CAST(@lastDate AS datetime)) as nvarchar(22))
@tinka,你会发表你的评论作为答案吗?
是字符表示 dd.mm.yyyy hh:mi 吗?如果是这样,我们不能简单地 CAST 到 DATETIME
【参考方案1】:
这就是为什么您应该使用适当的数据类型。
要使用任何 DATETIME 函数,您需要将值转换为 DATE/Datetime,然后使用该函数,然后将其转换回 varchar 以更新列。
类似......
UPDATE [dbo].[infoTbl]
SET lastDate = CONVERT(VARCHAR(23),
DATEADD (DAY
,5
, CAST( SUBSTRING(lastDate , 7, 4)
+SUBSTRING(lastDate , 4, 2)
+LEFT(lastDate ,2)
+' ' +RIGHT(lastDate, 5) AS DateTime)
), 121)
WHERE ISDATE( SUBSTRING(lastDate , 7, 4)
+ SUBSTRING(lastDate , 4, 2)
+ LEFT(lastDate ,2)
+' ' +RIGHT(lastDate, 5)) = 1
【讨论】:
"我有其他信息:将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。"也有错误 你试图在猪身上放一个 lispick,你需要在这里解决实际问题,你不应该将日期存储在 varchar 中,为你的列使用日期/日期时间数据类型。现在你可以添加一个 where 子句来只影响有效的日期时间值。 是的,我知道,但是这个数据库很旧,需要更改代码。 更准确地说,如果样本日期时间是 '20.09.2015 10:14' ,CAST 会失败,因为它在 dd/mm/yyyy 而不是 mm/dd/yyyy 中 是的,我的日期值是 20.09.2015 10:14 。我有一个 vb.net 应用程序,对不起,我不使用你的脚本。【参考方案2】:请尝试以下脚本
declare @chardate varchar(30) = '10.09.2015 10:14'
declare @datetime datetime
set @datetime = convert(datetime, substring(@chardate,1,10),104) + convert(datetime, substring(@chardate,12,5),108)
select dateadd(dd,5,@datetime)
在将字符日期时间表示转换为日期时间变量时,您可以使用CONVERT function with Datetime Format options
您可以在给定的参考资料中找到 104、108 格式选项 不幸的是,您的字符表示与基本格式不匹配,所以我不得不分开日期和时间
【讨论】:
以上是关于Sql server Varchar DateTime Column 添加 Day to Date 怎么办?的主要内容,如果未能解决你的问题,请参考以下文章
sql server 数据库 datetime 获取当前时间 精确到小时
SQL Server char,varchar,nchar,nvarchar区别