生成日期时间范围 SQL Server 2000

发布于 2024-12-29 18:06:56 字数 208 浏览 0 评论 0原文

我正在尝试以 datetime 格式生成 2012 年全年的日期,以存储在 SQL Server 表的 datetime 列中。

这是怎么做到的?

因此,开始日期将为 1/1/201231/12/2012,但格式正确。我假设应该生成 365 行。有什么想法吗?

I am trying to generate dates for the whole year of 2012 in datetime format to store in a SQL Server table in a datetime column.

How is that done?

So start date would be 1/1/2012 until 31/12/2012 but in the correct format. I am assuming I should have 365 rows generated. Any idea?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

奢华的一滴泪 2025-01-05 18:06:56
CREATE TABLE DateTimeRange2012([Date] DATETIME NOT NULL)
GO
INSERT INTO DateTimeRange2012([Date])

SELECT DATEADD(day, Number, '20120101')
FROM master..spt_values
WHERE Number < 366 AND type = 'P'

对于保持价值观的坚持更加明确吗?

CREATE TABLE DateTimeRange2012([Date] DATETIME NOT NULL)
GO
INSERT INTO DateTimeRange2012([Date])

SELECT DATEADD(day, Number, '20120101')
FROM master..spt_values
WHERE Number < 366 AND type = 'P'

Much more clear for keeping the values persisted?

半窗疏影 2025-01-05 18:06:56

奥列格·多克(Oleg Dok)的回答很好。

为了扩展他的答案,这里有一个存储过程,它接受年份并生成该年的所有日期。这考虑了闰年。

CREATE PROCEDURE GenerateDates (@Year INT)
AS

SET NOCOUNT ON

DECLARE @FirstDate DATETIME
DECLARE @NoOfDates INT

SET @FirstDate = DateAdd(Year, @Year-1900, 0)
IF MONTH(DATEADD(Day, 59, @FirstDate))=3
    SET @NoOfDates = 365
ELSE
    SET @NoOfDates = 366

INSERT INTO DateTimeRange([Date])
    SELECT DATEADD(day, Number, @FirstDate) 
    FROM master..spt_values 
    WHERE Number < @NoOfDates AND type = 'P' 

一个附带条件。我相信“spt_values”可能不受支持,并且可能在 SQL Server 的未来版本中被删除。然而,我读到它正在 SQL Server 11 示例代码中使用,所以也许现在还不用担心。

Nice answer from Oleg Dok.

To expand upon his answer, here's a stored procedure that accepts a year and generates all of the dates for the year. This takes into account leap years.

CREATE PROCEDURE GenerateDates (@Year INT)
AS

SET NOCOUNT ON

DECLARE @FirstDate DATETIME
DECLARE @NoOfDates INT

SET @FirstDate = DateAdd(Year, @Year-1900, 0)
IF MONTH(DATEADD(Day, 59, @FirstDate))=3
    SET @NoOfDates = 365
ELSE
    SET @NoOfDates = 366

INSERT INTO DateTimeRange([Date])
    SELECT DATEADD(day, Number, @FirstDate) 
    FROM master..spt_values 
    WHERE Number < @NoOfDates AND type = 'P' 

One proviso. I believe that "spt_values" may not be supported and may be removed in future versions of SQL Server. However, I have read that it is being used in SQL Server 11 example code so perhaps it's not a worry just yet.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文