T-SQL 2008将日期和时间字符串转换为datetime
问题描述:
我在表格中有两列,一个用于捕获时间,另一个用于捕获日期。不幸的是,两者都是varchar()。我需要将这两个字段连接在一起,然后将它们转换为datetime。T-SQL 2008将日期和时间字符串转换为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)引入到整个查询中,它就会给我带来错误。
任何帮助尝试完成此操作都很有帮助。谢谢!
答
您可以将DATE和TIME值一起转换为DATETIME后连接在一起。下面是与演示了连接DATE列,并已被存储为VARCHAR 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);
答
您可以使用此选项
DECLARE @date date = '20010101',
@time time = '01:01:01'
SELECT CAST(@date AS datetime) + @time
结果:2001-01-01 01:01:01.000
演示on SQLFiddle
答
您使用的是SQL 2012吗?如果是这样,你可以使用datetimedromparts函数来实现这一点。如果不是因为这个具体的例子,它总是好的,知道未来:)
+0
不,SQL 2008.对不起,应该指定。 – 2013-03-08 21:26:33
感谢,这为我做! – 2013-03-08 21:42:23