Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何根据SQL中给定的日期获取记录_Sql_Sql Server - Fatal编程技术网

如何根据SQL中给定的日期获取记录

如何根据SQL中给定的日期获取记录,sql,sql-server,Sql,Sql Server,我试图根据下表中给定的两个日期计算天数和阅读天数。我在SQL方面没有什么经验,但没有任何线索来解决这个问题。你们中的任何人都可以帮助我 Create Table Meter_Reading(ID(int),From_Date (Datetime), To_Date(Datetime), Reading (int)) INSERT INTO Meter_Reading VALUES (1, '2015-05-15', '2015-06-14',20); INSERT INTO M

我试图根据下表中给定的两个日期计算天数和阅读天数。我在SQL方面没有什么经验,但没有任何线索来解决这个问题。你们中的任何人都可以帮助我

Create Table Meter_Reading(ID(int),From_Date (Datetime), To_Date(Datetime), Reading (int))

    INSERT INTO Meter_Reading VALUES (1, '2015-05-15', '2015-06-14',20);
    INSERT INTO Meter_Reading VALUES (2, '2015-06-15', '2015-07-17',30);
    INSERT INTO Meter_Reading VALUES (3, '2015-07-18', '2013-08-11',10);

    Declare @StartDT Datetime,@EndDT Datetime

    SET @STARTDT = '2015-05-01'
    SET @ENDDT  = '2015-06-30'

    select ID  
          ,case when From_Date >= @StartDT THEN DATEDIFF(d,@StartDT,From_Date)
                    ELSE DATEDIFF(d,TO_Date,@ENDDT) end 'Days'
          ,Reading
    FROM Meter_Reading
    WHERE (From_Date <= @ENDDT
            and TO_Date >= @STARTDT)   

    Output with the above logic:
     1  14  20
     2  45  30

    Output Expected:
     1  31  20
     2  16  30
Create Table Meter_Reading(ID(int)、From_Date(Datetime)、To_Date(Datetime)、Reading(int))
插入仪表读数值(1,'2015-05-15','2015-06-14',20);
插入仪表读数值(2,'2015-06-15','2015-07-17',30);
插入仪表读数值(3,'2015-07-18','2013-08-11',10);
声明@StartDT Datetime,@EndDT Datetime
SET@STARTDT='2015-05-01'
设置@ENDDT='2015-06-30'
选择ID
,从日期开始>=@StartDT然后是DATEDIFF时的情况(d,@StartDT,从日期开始)
ELSE DATEDIFF(d,TO_Date,@ENDDT)结束“天”
,阅读
从电表读数
其中(起始日期=@STARTDT)
具有上述逻辑的输出:
1  14  20
2  45  30
预期产出:
1  31  20
2  16  30

我想这会给你想要的

Declare @StartDT DATE
        ,@EndDT DaTE

SET @STARTDT = '2015-05-01'
SET @ENDDT  = '2015-06-30'


select PRODUCT_ID   
        ,case when From_Date >= @StartDT THEN DATEDIFF(d,@StartDT,From_Date)
                ELSE DATEDIFF(d,TO_DATE,@ENDDT) end 'DATEDIF'
FROM TABLEName
WHERE (FROM_DATE <= @ENDDT
        and TO_DATE >= @STartDT )       
声明@StartDT日期
,@EndDT日期
SET@STARTDT='2015-05-01'
设置@ENDDT='2015-06-30'
选择产品标识
,从日期开始>=@StartDT然后是DATEDIFF时的情况(d,@StartDT,从日期开始)
ELSE DATEDIFF(d,TO_DATE,@ENDDT)结束'DATEDIF'
从表名
其中(起始日期=@STartDT)

您需要一些复杂的日期逻辑,例如:

select t.*,
       datediff(day, (case when t.from_date < @StartDate then @StartDate else t.from_date and),
                (case when t.to_date > @EndDate then @EndDate else t.to_date end)
               ) + 1 as diff
from table t
where t.from_date <= @EndDate and t.to_date >= @StartDate
选择t.*,
datediff(天)(当t.from_date<@StartDate然后@StartDate否则t.from_date和),
(t.to_date>@EndDate然后@EndDate else t.to_date end时的情况)
)+1 as diff
来自表t
其中t.from_date=@StartDate

2015-05-15至2015-06-14超过14天。你是说只算工作日吗?不包括假期吗?需要更多关于如何获得天数的详细信息。@t谢谢您的快速回复。假设我通过了2015-06-01和2015-06-30。如果上面表格的任何记录中有这些日期之一,那么我想得到该特定记录中的截止日期天数(列)值以及数量。所以前14天在第一条记录中,然后接下来的16天在下一条记录中。如果传入的两个日期都在同一范围内,这有关系吗?@t不,这不应该是一个问题,我试图将假日也包括在内。起始日期在@STARTDT之前,截止日期在@ENDDT之后?@Holmes IV,更新了我的表格并尝试了类似的内容,但没有得到我想要的。我已经用你的逻辑更新了我的问题。如果我遗漏了什么,请告诉我。我在更新的问题中更改了我的表格和其他一些内容非常感谢您的宝贵建议,最后我可以在@Gordon Linoff的帮助下解决这个问题谢谢。我终于可以用你的逻辑解决我的问题了。