【问题标题】:Conversion of DateTime日期时间的转换
【发布时间】:2018-01-10 17:25:25
【问题描述】:

我有以下疑问:

set @DataEnd = '
          select top 1 datetime 
          from IntradayHistory.dbo.IntradayDataHistory' + @product + ' 
          where TickerID = ' + cast(@ticker as nvarchar(24)) + ' 
          order by datetime desc
'
exec(@DateEnd)

这应该只返回 1 个值,它确实返回了:

但是,由于我需要该值作为 DateTime 进行动态查询,我应该怎么做?

【问题讨论】:

  • 我试图在我的 CTE 表中添加这个:where stime <= ''' + convert(nvarchar(max),@DateEnd,121) + ''' 但也无济于事。
  • 我也试过这个:stime <= 'exec(@DateEnd)'
  • 你能提供sample data and expected output吗?当我们有一些数据可供使用时,通常会更容易回答问题。
  • @destination-data 嗨,我没有确切的样本数据,但更多所以我想:declare @DataEnd as datetime set @DataEnd = ' select top 1 datetime from IntradayHistory.dbo.IntradayDataHistory' + @product + ' where TickerID = ' + cast(@ticker as nvarchar(24)) + ' order by datetime desc' 原因是因为我知道查询只会给我 1 个日期时间结果。跨度>
  • 我想我明白了。您是否尝试将 Date Time 存储在 var 中以供以后使用?如果是这样,看看这个question。

标签: sql sql-server sql-server-2014


【解决方案1】:

使用sp_executesql,您可以将输出参数发送到动态查询。

DECLARE @sqlCommand NVARCHAR(MAX);
DECLARE @dateEnd DATETIME;
SET @sqlCommand = '
          select top 1 @retVal = datetime 
          from IntradayHistory.dbo.IntradayDataHistory' + @product + ' 
          where TickerID = ' + cast(@ticker as nvarchar(24)) + ' 
          order by datetime desc
';
EXECUTE sp_executesql @sqlCommand, N'@retVal DATETIME OUTPUT', @retVal=@dateEnd OUTPUT;
SELECT @dateEnd;

选项 B:

您可以使用临时表来存储动态查询的结果。

DECLARE @sqlCommand NVARCHAR(MAX);
SET @sqlCommand = '
      select top 1 datetime 
      from IntradayHistory.dbo.IntradayDataHistory' + @product + ' 
      where TickerID = ' + cast(@ticker as nvarchar(24)) + ' 
      order by datetime desc
';
CREATE TABLE #temp1 (Result DATETIME);
INSERT INTO #temp1 EXEC (@sqlCommand);
SELECT * FROM #temp1;

【讨论】:

  • 嗨,我试过你分享的内容,但是,我得到了错误:Msg 214, Level 16, State 2, Procedure sp_executesql, Line 21 Procedure expects parameter '@statement' of type 'ntext/nchar/nvarchar'
  • @fauxpas 你在x 和c 之间缺少一个字符
  • 对不起,我用新的错误替换了错误,也注意到了!
  • 在替换字符后出现另一个错误:Msg 214, Level 16, State 2, Procedure sp_executesql, Line 21 Procedure expects parameter '@statement' of type 'ntext/nchar/nvarchar',我得到的结果应该是 NULL 吗?
  • 你用NVARCHAR(MAX)做sql语句了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-25
  • 2010-10-12
  • 2013-09-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多