SQL 查询以返回特定日期范围内的服务器列表
SQL query to bring back list of servers from specific date range
我正在尝试使用 SQL Server Management Studio 2017 进行查询,以返回预计迁移日期为今年的所有服务器的数量.我现在进行了一次查询,但它仍然带回了一些具有多年前日期的服务器。
SELECT MONTH(Projected) as [Month], count(*) as [Total]
FROM dbo.tFake
WHERE Projected >='01/01/2019' AND Projected <='12/31/2019
GROUP BY Month(Projected)
ORDER BY [Month]
日期格式是 mm/dd/yyyy
顺便说一下。我怎样才能让这个查询只带回预计在 2019 年使用的服务器?
假设您的数据类型有误,第一步是修复它。
请注意,我假设您的数据仅包含日期,而不包含时间(您的查询暗示)。首先,您需要将所有行的值更改为可转换值,我们将使用 ISO 格式 yyyyMMdd
:
UPDATE dbo.tFake
SET Projected = CONVERT(varchar(8),CONVERT(date,Projected,101),112);
现在所有行都是格式为 yyyyMMdd
的文字字符串,我们可以更改列:
ALTER TABLE dbo.tFake ALTER COLUMN Projected date;
现在,我们可以再次运行您的查询,但现在您的数据类型是正确的,您不会遇到问题:
SELECT MONTH(Projected) as [Month], count(*) as [Total]
FROM dbo.tFake
WHERE Projected >= '20190101' AND Project < '20200101' --I prefer the >= and < method. This is especially import with date & time data types
GROUP BY Month(Projected)
ORDER BY [Month];
注意我传递的文字字符串也是 yyyyMMdd
格式。如果您 必须 传递格式为 MMddyyyy
的文字字符串,您可以使用样式代码 101
包装在 CONVERT
中: CONVERT(date,'12/31/2019',101)
. 101
表示美式日期 (CAST and CONVERT (Transact-SQL).
记住,此解决方案假设您只有日期值,而不是日期和时间值。如果您这样做(具有日期和时间值),您需要使用适当的日期和时间数据类型并使用 ISO8601 样式,而不是 ISO 样式。
我正在尝试使用 SQL Server Management Studio 2017 进行查询,以返回预计迁移日期为今年的所有服务器的数量.我现在进行了一次查询,但它仍然带回了一些具有多年前日期的服务器。
SELECT MONTH(Projected) as [Month], count(*) as [Total]
FROM dbo.tFake
WHERE Projected >='01/01/2019' AND Projected <='12/31/2019
GROUP BY Month(Projected)
ORDER BY [Month]
日期格式是 mm/dd/yyyy
顺便说一下。我怎样才能让这个查询只带回预计在 2019 年使用的服务器?
假设您的数据类型有误,第一步是修复它。
请注意,我假设您的数据仅包含日期,而不包含时间(您的查询暗示)。首先,您需要将所有行的值更改为可转换值,我们将使用 ISO 格式 yyyyMMdd
:
UPDATE dbo.tFake
SET Projected = CONVERT(varchar(8),CONVERT(date,Projected,101),112);
现在所有行都是格式为 yyyyMMdd
的文字字符串,我们可以更改列:
ALTER TABLE dbo.tFake ALTER COLUMN Projected date;
现在,我们可以再次运行您的查询,但现在您的数据类型是正确的,您不会遇到问题:
SELECT MONTH(Projected) as [Month], count(*) as [Total]
FROM dbo.tFake
WHERE Projected >= '20190101' AND Project < '20200101' --I prefer the >= and < method. This is especially import with date & time data types
GROUP BY Month(Projected)
ORDER BY [Month];
注意我传递的文字字符串也是 yyyyMMdd
格式。如果您 必须 传递格式为 MMddyyyy
的文字字符串,您可以使用样式代码 101
包装在 CONVERT
中: CONVERT(date,'12/31/2019',101)
. 101
表示美式日期 (CAST and CONVERT (Transact-SQL).
记住,此解决方案假设您只有日期值,而不是日期和时间值。如果您这样做(具有日期和时间值),您需要使用适当的日期和时间数据类型并使用 ISO8601 样式,而不是 ISO 样式。