首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何获取Server中的数据差异和返回值

如何获取Server中的数据差异和返回值
EN

Stack Overflow用户
提问于 2019-12-14 11:38:53
回答 2查看 51关注 0票数 0

如何获得与用户注册到当前日期的日期不同的日期?我有这样的设想:

我在主表中有一些固定值,如[0, 6, 12, 18, 24, 30, 36, 42 .....]和假设

  1. 日差大于或等于1且小于6,则应返回1。
  2. 日差大于6,小于12,则应返回2等等,
  3. 日差大于12,小于18然后返回3。
  4. 日差大于18,小于24然后返回4。。.

诸若此类。我不想使用case语句,因为主表中的值不能修复,但是值模式将被修复。表值模式是这样的:两个连续值的共同差异是6,即

代码语言:javascript
复制
if n=0 then 
   n+1 = (0 + 6) => 6

谢谢

代码语言:javascript
复制
declare @day int;
declare @regdate datetime = '2019-12-09 19:24:19.623';
declare @currentDate datetime = GETDATE();
SET @day = (SELECT DATEDIFF(day, @regdate, @currentDate) % 6  FROM tblMembers  WHERE Id = 1)
PRINT @day
EN

回答 2

Stack Overflow用户

发布于 2019-12-14 11:45:54

我认为你在寻找整数除法,而不是模除法。当两个参数都是整数时,这是Server中的默认行为,因此,由于DATEDIFF返回一个整数,因此应该这样做:

代码语言:javascript
复制
1 + DATEDIFF(day, @regdate, @currentDate) / 6 
票数 0
EN

Stack Overflow用户

发布于 2019-12-14 11:58:53

下面是您可以在以下基础上构建解决方案的方法:

代码语言:javascript
复制
declare @masterTable table (id int, col int);
insert into @masterTable values
(1,0) ,
(2,6) ,
(3,12),
(4,18),
(5,24),
(6,30),
(7,36),
(8,42),
(9,48);

-- test data
declare @day int;
declare @regdate datetime = '2019-12-09 19:24:19.623';
declare @currentDate datetime = GETDATE();
select @day = datediff(day, @regdate, @currentDate)

;with cte as (
    select id,
           col lowerBound,
           -- here we need to provide some fallback value for last record
           coalesce(lead(col) over (order by id), 1000) upperBound
    from @masterTable
)

select id from (values (@day)) [day]([cnt])
join cte on [day].[cnt] between cte.lowerBound and cte.upperBound
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59334772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档