我有一条SQL Server select语句,它在创建的表中插入数据。
现在,我必须定义所有参数并为每个参数运行语句。为了更有效率,我希望在连续的几天内多次运行该语句,例如在2013-31-12和2014-02-19之间的所有日期。
最后,我希望将结果数据放在一个表中,在定义的timestamp列(假设是定义的变量)中有不同的时间戳。
现在我的工作是:
DECLARE @historicalDate DATETIME
SELECT @historicalDate = '2013-31-12'#
SELECT * ....
rest...
into #data我知道如何用C或MATLAB做这件事。我只需要使用一个for循环并定义一个运行变量来运行该语句并将其存储在一个表中。
但是如何在SQL Server中处理呢?
发布于 2014-02-19 22:59:29
您可以在SQL中运行While循环。有关语法,请查看http://technet.microsoft.com/en-us/library/ms178642.aspx。
因此,对于您的情况,如下所示:
WHILE (SELECT datetime FROM historicalDate) < '2014-02-19')
{
//your code to update datebase
}发布于 2014-02-19 23:13:24
如果要插入定义日期范围的所有行-请使用类似以下内容:
DECLARE @FromDate DATETIME
DECLARE @ToDate DATETIME
SET @FromDate = '20131231' -- use the robust ISO-8601 format here to avoid issues!
SET @ToDate = '20140219'
SELECT (list of columns)
INTO #data(list of columns)
WHERE TimestampColumn >= @FromDate
AND TimestampColumn <= @ToDate 这可以在一个基于集合的操作中完成整个处理过程--非常简单
或者,如果这不能解决你的问题,你到底想要达到什么目的?
发布于 2014-02-19 23:26:27
最简单的解决方案是使用日历表,并将指定日期范围的日历表连接到您的查询。如果您还没有日历表,请参阅:How to create a Calender table for 100 years in Sql
然后,您将能够执行类似以下内容的操作:
Select <fields>
FROM <YourTable> T
CROSS JOIN CALENDAR C
WHERE C.DATE BETWEEN @startdate and @enddatehttps://stackoverflow.com/questions/21883979
复制相似问题