【问题标题】:T-SQL 2008 Convert Date and time string to datetimeT-SQL 2008 将日期和时间字符串转换为日期时间
【发布时间】:2013-02-24 11:41:47
【问题描述】:

我的表中有两列,一列用于捕获时间,另一列用于捕获日期。不幸的是,两者都是 varchar()。我需要将这两个字段连接在一起,然后将它们转换为日期时间。

我正在尝试用这个来实现:

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) 引入整个查询,它就会给我错误。

尝试完成此操作的任何帮助都是有帮助的。谢谢!

【问题讨论】:

    标签: sql datetime time concatenation varchar


    【解决方案1】:

    您可以在将 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);
    

    【讨论】:

    • 谢谢,这是为我做的!
    【解决方案2】:

    您可以使用此选项

    DECLARE @date date = '20010101',
            @time time = '01:01:01'
    
    SELECT CAST(@date AS datetime) + @time
    

    结果:2001-01-01 01:01:01.000

    SQLFiddle上的演示

    【讨论】:

      【解决方案3】:

      您使用的是 SQL 2012 吗?如果是这样,您可以使用 datetimedromparts 函数来实现这一点。如果不是这个具体的例子,知道未来总是好的:)

      http://technet.microsoft.com/en-gb/library/hh213233.aspx

      【讨论】:

      • 不,SQL 2008。抱歉,应该指定。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-12
      • 2018-03-11
      • 2015-09-17
      • 2011-09-08
      • 2017-05-05
      • 1970-01-01
      • 2022-08-18
      相关资源
      最近更新 更多