如何在SQL server中选择要显示的日期?

如何在SQL server中选择要显示的日期?,sql,sql-server,Sql,Sql Server,有没有一种方法可以让我在sql dates from to中使用select语句显示日期? 例如,如果我选择2013年1月15日作为起始日期,选择2013年1月20日作为起始日期,则查询将显示以下内容: DATE 2013/01/15 12:00 2013/01/16 12:00 2013/01/16 12:00 2013/01/17 12:00 2013/01/18 12:00 2013/01/19 12:00 2013/01/20 12:00 这可能吗?

有没有一种方法可以让我在sql dates from to中使用select语句显示日期? 例如,如果我选择2013年1月15日作为起始日期,选择2013年1月20日作为起始日期,则查询将显示以下内容:

    DATE
 2013/01/15  12:00
 2013/01/16  12:00
 2013/01/16  12:00
 2013/01/17  12:00
 2013/01/18  12:00
 2013/01/19  12:00
 2013/01/20  12:00

这可能吗?

在…和之间使用

SELECT DateCol
FROM TableName
WHERE DateCol BETWEEN @FromDate AND @ToDate
ORDER BY DateCol

在…和之间使用

SELECT DateCol
FROM TableName
WHERE DateCol BETWEEN @FromDate AND @ToDate
ORDER BY DateCol

一个更好的方法是写以下内容:

DECLARE @from DATE, @to DATE;
SELECT @from = '2013-01-15' , @to = '2013-01-20';

  SELECT DATEADD(DAY, n-1, @from)
  FROM
  (
    SELECT TOP (DATEDIFF(DAY, @from, @to)+1) ROW_NUMBER() 
      OVER (ORDER BY s1.[object_id])
      FROM sys.all_objects AS s1
      CROSS JOIN sys.all_objects AS s2
  ) AS x(n);

检查这里。

更好的方法是写以下内容:

DECLARE @from DATE, @to DATE;
SELECT @from = '2013-01-15' , @to = '2013-01-20';

  SELECT DATEADD(DAY, n-1, @from)
  FROM
  (
    SELECT TOP (DATEDIFF(DAY, @from, @to)+1) ROW_NUMBER() 
      OVER (ORDER BY s1.[object_id])
      FROM sys.all_objects AS s1
      CROSS JOIN sys.all_objects AS s2
  ) AS x(n);

检查这里。

下一个解决方案。我觉得更直观

declare @table table (d datetime)

declare @start datetime = '2014-01-01'
declare @stop datetime = '2014-01-21'

while @start <= @stop
begin
  insert into @table (d)
  values (@start)

  set @start = DATEADD(day, 1, @start)
end

select * from @table
declare@table表(d datetime)
声明@start datetime='2014-01-01'
声明@stop datetime='2014-01-21'

而@start是下一个解决方案。我觉得更直观

declare @table table (d datetime)

declare @start datetime = '2014-01-01'
declare @stop datetime = '2014-01-21'

while @start <= @stop
begin
  insert into @table (d)
  values (@start)

  set @start = DATEADD(day, 1, @start)
end

select * from @table
declare@table表(d datetime)
声明@start datetime='2014-01-01'
声明@stop datetime='2014-01-21'

当@start时,如果我没有一列上有日期怎么办?我还可以得到日期吗?这取决于字段中的数据类型。例如,如果你有varchar,你可以使用convert-to-datetime,而不是@raing所说的使用between。您可以使用cast函数,但日期的格式应正确。尝试从表1中选择cast(数据列为datetime),如果没有包含日期的列怎么办?我还可以得到日期吗?这取决于字段中的数据类型。例如,如果你有varchar,你可以使用convert-to-datetime,而不是@raing所说的使用between。您可以使用cast函数,但日期的格式应正确。尝试从表1中选择cast(data列为datetime),我不确定他是否有权访问
sys
,但这是一个很好的解决方案+1我不确定他是否有权访问
sys
,但这是一个很好的解决方案+1可能的dup可能的dup