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快速建表

SQL-Server Varchar 的大小

SQL Server char,varchar,nchar,nvarchar区别

在 SQL Server 中检索 VARCHAR 列的最大长度

SQL Server中varchar(n)和nvarchar(n)