【问题标题】:SQL Server get two days difference and days count from date rangeSQL Server 从日期范围中获得两天的差异和天数
【发布时间】:2015-08-14 02:23:36
【问题描述】:

我使用的是 SQL Server 2010。

我在数据库中有一张表,记录如下:

Id | EmpName  | JoinDate                | ResignedDate
---+----------+-------------------------+--------------    
1  | Govind   | 2014-04-02 00:00:00.000 | 2014-04-02
2  | Aravind  | 2014-04-05 00:00:00.000 | 2014-04-05
3  | Aravind  | 2014-04-07 00:00:00.000 | 2014-04-10
4  | Aravind  | 2014-04-10 00:00:00.000 | 2014-04-11
5  | Aravind  | 2014-04-14 00:00:00.000 | 2014-04-16

现在,我想显示两个日期(joinDate、ResignDate)的差异以及该日期的不同可用计数

样本输出:

DateDifferent      Count
-------------      -----
0                     2
1                     1
2                     1
3                     1

这里显示我的示例查询,

entityManager.createNativeQuery(SELECT 
  DATEDIFF(day, e.joinedDate , e.resignedDate), 
  COUNT(DATEDIFF(day, e.joinedDate , e.resignedDate)))
FROM 
  Employee e 
GROUP BY 
  DATEDIFF(e.joinedDate , e.resignedDate) ORDER BY (DATEDIFF(e.joinedDate , e.resignedDate)));

此查询适用于 mssql 查询浏览器,但是当我在 JPA Native Query(Java 代码)中使用该查询时,此查询不起作用

谁能帮帮我...

【问题讨论】:

  • 这不是java 的问题。改为使用sql 和sql-server 标记。
  • 能否请您详细说明在JPA 代码中此查询不起作用 的含义。是否给出错误或不正确的结果或根本没有结果?
  • 添加你的 JPA 代码以及你得到错误的地方(如果有的话)
  • 您在此处的查询不起作用。您在 group by 子句和 order by 子句中缺少 datediff 函数中的第一个参数。您在 count 函数中设置正确,所以我猜您在此处发布的 java 代码中使用了错误版本的查询,并且在 SSMS 中测试时使用了正确版本的查询。
  • SELECT DATEDIFF(day,JoinDate,ResignedDate), count(DATEDIFF(day,JoinDate,ResignedDate)) AS DateDifferent FROM Employee GROUP BY DATEDIFF(day,JoinDate,ResignedDate) 试试这个

标签: sql-server


【解决方案1】:

SQL Fiddle

MS SQL Server 2008 架构设置:

CREATE TABLE Employee
    ([Id] int, [EmpName] varchar(7), [JoinDate] datetime, [ResignedDate] datetime)
;

INSERT INTO Employee
    ([Id], [EmpName], [JoinDate], [ResignedDate])
VALUES
    (1, 'Govind', '2014-04-02 00:00:00', '2014-04-02 00:00:00'),
    (2, 'Aravind', '2014-04-05 00:00:00', '2014-04-05 00:00:00'),
    (3, 'Aravind', '2014-04-07 00:00:00', '2014-04-10 00:00:00'),
    (4, 'Aravind', '2014-04-10 00:00:00', '2014-04-11 00:00:00'),
    (5, 'Aravind', '2014-04-14 00:00:00', '2014-04-16 00:00:00')
;

查询 1:

SELECT
      DATEDIFF(DAY, JoinDate, ResignedDate) AS DateDifferent
    , COUNT(DATEDIFF(DAY, JoinDate, ResignedDate)) as FrequencyOf
FROM Employee
GROUP BY DATEDIFF(DAY, JoinDate, ResignedDate)
ORDER BY DateDifferent

注意!您可以在 ORDER BY 子句中使用列别名(例如 DateDifferent)

Results:

| DateDifferent | FrequencyOf |
|---------------|-------------|
|             0 |           2 |
|             1 |           1 |
|             2 |           1 |
|             3 |           1 |

【讨论】:

  • 谢谢...这个查询在 MSSQL 查询浏览器上运行良好,但是当我在使用 jdbc 的 java 代码中使用这个查询时它不起作用..你能帮帮我吗
  • 你在注入参数值吗?查询是非常标准的 SQL 语法,实际上它是非常标准的东西。我无法在 java 方面提供帮助。
猜你喜欢
  • 1970-01-01
  • 2017-08-16
  • 1970-01-01
  • 2014-10-07
  • 2022-12-01
  • 1970-01-01
  • 2021-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多