【问题标题】:Two nvarchar columns into one datetime. MSSQL两个 nvarchar 列合并为一个日期时间。微软SQL
【发布时间】:2017-02-07 16:02:45
【问题描述】:

我有两列:

 date(nvarchar) - it looks like '2015-04-15 00:00:00.000' 
 time(nvarchar) - looks like '1899-12-30 11:20:25.000' 

我需要将其合并为一列(日期时间)。我该怎么做?

【问题讨论】:

    标签: sql sql-server datetime select varchar


    【解决方案1】:

    首先,不要将日期/时间值存储为字符。但是,您可以转换它们并添加它们:

    select cast(datechar as datetime) + cast(right(timechar, 12) as time)
    

    我刚刚意识到。我不记得默认日期/时间格式是否理解小数秒。以下更安全:

    select (convert(datetime, datechar, 121) +
            convert(time, convert(datetime, timechar, 121))
           ) as datetimeval
    

    【讨论】:

    • 加法适用于不同的数据? (日期时间和时间)
    • @RaduGheorghiu。 . .我很惊讶文档并没有更好,但我确实发现:“加号 (+) 和减号 (-) 运算符也可用于对 datetime 和 smalldatetime 值执行算术运算。”转换为时间是为了保证只有一个time组件;我猜 SQL Server 会将其转换回 datetime
    【解决方案2】:

    例如,添加第 3 列 ([FullDate]) 后,您可以使用以下代码:

    UPDATE TABLE
    SET [FullDate] = DATEADD(SECOND, SECOND(TIME), DATEADD(MINUTE, MINUTE(TIME), DATEADD(HOUR, HOUR(TIME), DATE)))
    

    或者,您可以按照@GordonLinoff 提到的方式进行操作,但请确保将time 部分转换为datetime。所以,是这样的:

    UPDATE TABLE
    SET [FullDate] = CAST([date] as DATETIME) + CAST([time] AS DATETIME)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-21
      • 2015-12-23
      • 1970-01-01
      • 2015-06-03
      • 2012-08-19
      • 2019-04-30
      相关资源
      最近更新 更多