我的表中有两列,一列用于捕获时间,另一列用于捕获日期。不幸的是,两者都是varchar()。我需要取两个字段,将它们连接在一起,然后将它们转换为datetime。
我试图用这个来实现这个目标:
select CONVERT(datetime,(select txt_returned_date+' '+CONVERT(varchar(20),CONVERT(TIME,txt_time_returned))),126)
from table_name
我收到此错误消息:
Conversion failed when converting date and/or time from character string.
日期被捕获为“20130308”字符串。时间被捕获为“4:27 PM”作为字符串
我在这里做的是将时间字符串转换为TIME,然后再转换为varchar。然后我将它们连接在一起。这本身就可以工作,但是一旦我将CONVERT(datetime)引入整个查询,就会给我错误。
尝试完成此任务的任何帮助都很有帮助。谢谢!
答案 0 :(得分:4)
将DATE和TIME值转换为DATETIME后,可以将它们连接在一起。这是一个可以播放的示例,它显示了连接已存储为VARCHAR的DATE列和TIME列:
-- Set up some variables to test with
DECLARE @myTime TIME = GETDATE()
, @myDate DATE = GETDATE()
, @myTimeTxt VARCHAR(16)
, @myDateTxt VARCHAR(10);
-- Initialize your variables
SELECT @myTimeTxt = @myTime
, @myDateTxt = @myDate;
-- Display your separated values
SELECT @myDateTxt, @myTimeTxt;
-- Display your concatenated value
SELECT CAST(@myDateTxt AS DATETIME) + CAST(CAST(@myTimeTxt AS TIME) AS DATETIME);
答案 1 :(得分:1)
您可以使用此选项
DECLARE @date date = '20010101',
@time time = '01:01:01'
SELECT CAST(@date AS datetime) + @time
结果:2001-01-01 01:01:01.000
SQLFiddle上的演示
答案 2 :(得分:0)
您使用的是SQL 2012吗?如果是这样,您可以使用datetimedromparts功能来实现此目的。如果不是这个具体的例子,那么了解未来总是好的:)