【问题标题】:DateTime creation in T-SQL在 T-SQL 中创建日期时间
【发布时间】:2015-10-07 08:44:01
【问题描述】:

我需要将真实的日期时间参考日与表示小时/分钟信息的 varchar 值连接起来。

我已阅读 documentation 关于 DateTime 操作的信息,但还没有找到如何执行此操作。

这是我的示例:

DECLARE @ref_day [datetime]
DECLARE @hours [varchar](15)
DECLARE @result [datetime]

SET @ref_day = '2015-10-06'
SET @hours = '07:30'

SET @result = ???

我的预期结果是一个看起来像这样的 DateTime 对象:

@result = 2015/10/06 07:30:00.000

【问题讨论】:

  • 分享您的预期输出。
  • 另外,你见过CAST and CONVERT吗?
  • 预期的输出显然是2015-10-06 07:30:00.000...

标签: sql sql-server tsql datetime


【解决方案1】:

试试这个:

DECLARE @ref_day [datetime]
DECLARE @hours [varchar](15)
DECLARE @result [datetime]

SET @ref_day = '2015-10-06'
SET @hours = '07:30'

SET @result = DATEADD(day, DATEDIFF(day, 0, @ref_day), @hours)

【讨论】:

  • @rajeshmpanchal 为什么?它工作正常。只需要声明 DECLARE hours varchar(15)
  • @MarkSinkinson 你是什么意思?它会得到预期的结果。有什么问题?
  • @MarkSinkinson 现在至少示例代码完成了。我会留给 MegaTron 添加一些解释性文字。
【解决方案2】:

您可以将秒数添加到@hours 变量并将其转换为时间,然后在下面与@ref_day 连接:

DECLARE @ref_day [datetime]
DECLARE @hours varchar(20)
DECLARE @result [datetime]

SET @ref_day = '2015-10-06'
SET @hours = '07:30'

SET @result = @ref_day + ' ' + cast(@hours + ':00' as time)

SELECT @result

输出

2015-10-06 07:30:00.000

【讨论】:

  • 谁在没有解释的情况下否决了工作解决方案?
【解决方案3】:

使用DATETIMEFROMPARTS SQL Server 2012+:

LiveDemo

DECLARE @ref_day DATETIME;
DECLARE @hours VARCHAR(100);
DECLARE @result DATETIME;

SET @ref_day = '2015-10-06'
SET @hours = '07:30';

SELECT @result = DATETIMEFROMPARTS(YEAR(@ref_day),
                                   MONTH(@ref_day),
                                   DAY(@ref_day),
                                   DATEPART(hh,@hours),
                                   DATEPART(mi, @hours),
                                   0,
                                   0);

SELECT @result;        

【讨论】:

  • 并非所有 SQL Server 版本都支持 DATETIMEFROMPARTS。
【解决方案4】:

试试下面的查询

DECLARE @ref_day [datetime]
DECLARE @hours [varchar](15)
DECLARE @result [datetime]

SET @ref_day = '2015-10-06'
SET @hours = '07:30'

SET @result = @ref_day + @hours

SELECT FORMAT(@result,'yyyy/MM/dd hh:mm:ss.000', 'en-us')

【讨论】:

    【解决方案5】:

    可以添加 2 个日期时间,只需将时间转换为日期时间并像这样添加它们:

    DECLARE @ref_day datetime = '2015-10-06'
    DECLARE @hours   varchar(15) = '07:30'
    
    SELECT @ref_day +cast(@hours as datetime)
    

    结果:

    2015-10-06 07:30
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-09
      相关资源
      最近更新 更多