将Date数据类型转换为datetime数据类型并添加静态时间

时间:2013-10-18 04:28:57

标签: sql sql-server

我的智慧结束了...希望你们都能帮忙。我在sql表中有一个日期列entryexpire,例如:

2013-04-12

我需要将其转换为datetimeentryexpire中的所有值都会将24:00:00附加到新值,例如:

2103-04-12 24:00:00

我尝试过施法,隐蔽,添加新列和连接......所有人都失败了。

3 个答案:

答案 0 :(得分:0)

添加新列col2(日期时间)。问题更新:

update table t1 set col2 = cast(col1, datetime) // db specific function

删除列Col1。 将col2重命名为col1

我的意思是,还有其他一些方法可以做到这一点

答案 1 :(得分:0)

24:00:00实际上不是约会的选择 - 你将进入第二天。这是一个可以用来根据您的需求定制日期的精选语句,但是到达当天结束时最接近的是23:59:59.997

   DECLARE @MYDATE varchar(50) = '2013-04-12'

   SELECT DATEADD(DAY,1,DATEADD(Ms,-2, CAST(@MYDATE AS DATETIME)))

返回2013-04-12 23:59:59.997

或者,您可以使用两个不同的varchar列(您似乎尝试过),并像这样查询它们以获取日期时间

DECLARE @MYDATE varchar(50) = '2013-04-12'
declare @mytime varchar(50) = ' 23:59:59.998'

select CAST(@mydate + @mytime as datetime)

同样,使用23:59:59.999会使选择返回2013-04-13 00:00:00.000。不知道为什么。

答案 2 :(得分:0)

如果有人遇到同样的问题,这就是我解决的问题。我创建了一个char列 temptime 并使用更新命令将数据库中的所有记录的值23:59:00添加到该列中。

然后我创建了另一列作为datetime entryexpiredatetime

我的entryexpiredate作为char而temptime作为char列,我使用了@folksymAndrews代码,如下所示:

  

块引用

update [table] set entryexpiredatetime = CAST(ENTRYEXPIREDATE+timetime as datetime)

  

块引用

然后我删除了temptime列,并留下了原始的entryexpiredate和我需要的entryexpiredatetime列。

感谢您的帮助。这是我觉得我能完成任务的最佳方式,但我确信这种方法的入侵率较低。