我正在使用 SQL Server 来存储数千万条记录。我需要能够查询其表以查找 Id 列中存在间隙的缺失行,因为应该没有间隙。
我目前正在使用我在 StackOverflow 上找到的解决方案:
CREATE PROCEDURE [dbo].[find_missing_ids]
@Table NVARCHAR(128)
AS
BEGIN
DECLARE @query NVARCHAR(MAX)
SET @query = 'WITH Missing (missnum, maxid) '
+ N'AS '
+ N'('
+ N' SELECT 1 AS missnum, (select max(Id) from ' + @Table + ') '
+ N' UNION ALL '
+ N' SELECT missnum + 1, maxid FROM Missing '
+ N' WHERE missnum < maxid '
+ N') '
+ N'SELECT missnum '
+ N'FROM Missing ' …Run Code Online (Sandbox Code Playgroud) 我可以使用查询的一些帮助来扩展我正在使用的CSV,但我不知道处理查询的最佳方法.我的数据如下:
ID-Begin | ID-End | Color | Dwelling
-------------------------------------
79000 | 79999 | Red | Condo
82100 | 82600 | Blue | House
etc
Run Code Online (Sandbox Code Playgroud)
我需要在起始ID和结束ID之间生成一个范围,然后复制该范围的颜色和居住条目.这是我希望实现的目标:
ID | Color | Dwelling
------------------------
79000 | Red | Condo
79001 | Red | Condo
79002 | Red | Condo
.....
79999 | Red | Condo
82100 | Blue | House
82101 | Blue | House
.....
82600 | Blue | House
Run Code Online (Sandbox Code Playgroud)
我已经看到其他方法允许我生成单个数字范围,但没有任何方法可以从表中的列中提取开始和结束数字.
无论如何帮助非常感谢!!
风暴
寻找一个查询或函数,对于给定的日期,它将返回接下来的 10 天(包括给定的日期作为参数)作为两列: - 日期 - 工作日名称
我正在使用 SQL Server 2019。
更新(@Dale K):我已经计算了日期和工作日,但这些是作为两个单独的查询和新行而不是多行
declare @mydate datetime
set @mydate = '2020-1-1'
select @mydate + 0, @mydate + 1, @mydate + 2, @mydate + 3, @mydate + 4, @mydate + 5, @mydate + 6
select
datename(dw, @mydate + 0),
datename(dw, @mydate + 1),
datename(dw, @mydate + 2),
datename(dw, @mydate + 3),
datename(dw, @mydate + 4),
datename(dw, @mydate + 5),
datename(dw, @mydate + 6)
Run Code Online (Sandbox Code Playgroud) 我想datetime在SQL Server 2000中生成范围.我想要与2000,2005和2008兼容的东西.如果它与2012兼容,那也会很棒.
所以,我在这里找到了答案 - 在日期范围之间生成日期.但是,我想要两列而不是1.我想要一个开始日期列和一个结束日期列.如何修改下面的查询才能获得它?
-- Declarations
DECLARE @dates TABLE(dt datetime)
DECLARE @dateFrom datetime
DECLARE @dateTo datetime
SET @dateFrom = '2001/01/01'
SET @dateTo = '2001/01/12'
-- Query:
WHILE(@dateFrom < @dateTo)
BEGIN
SELECT @dateFrom = DATEADD(day, 1,@dateFrom)
INSERT INTO @dates
SELECT @dateFrom
END
-- Output
SELECT * FROM @dates
Run Code Online (Sandbox Code Playgroud)
我的代码 -
DECLARE @dates TABLE(StartDate datetime, EndDate datetime)
DECLARE @dateFrom datetime
DECLARE @dateTo datetime
DECLARE @StartDate datetime
DECLARE @EndDate datetime
SET @dateFrom = '2001/01/01'
SET @dateTo = '2001/01/12' …Run Code Online (Sandbox Code Playgroud)