我们可以在以下sql查询中实现innerjoin

时间:2016-01-04 12:53:36

标签: sql-server sql-server-2005

这些是我的表格:

CREATE TABLE forgerock (id INT, [date] DATETIME, empcode INT,[file] VARCHAR);
INSERT INTO forgerock
VALUES
    (1, '2015-12-31 01:20:02', 56, 'abc1'),
    (2, '2016-01-01 01:20:02', 58, 'abc2'),
    (3, '2016-01-02 01:20:02', 46, 'abc3'),
    (4, '2016-01-03 01:20:02', 16, 'abc4'),
    (5, '2016-01-04 01:20:02', 36, 'abc5');

CREATE TABLE forge (empcode INT, [user_name] VARCHAR);
INSERT INTO forge
VALUES
    (56, 'ram'),
    (58, 'ram1'),
    (46, 'ram2'),
    (16, 'ram3'),
    (36, 'ram4');

我正在尝试根据当前日期和当前日期前一天的表格打印文件名和user_name。

我尝试了查询:

ResultSet resultset = statement.executeQuery("select file  from forgerock where '"+date+"' >= CURRENT_DATE('"+date+"', INTERVAL 1 DAY);") ;

但我得到了例外:

  

关键字'CURRENT_DATE'附近的语法不正确。

6 个答案:

答案 0 :(得分:2)

IF OBJECT_ID('dbo.forgerock', 'U') IS NOT NULL
    DROP TABLE dbo.forgerock

CREATE TABLE dbo.forgerock (id INT PRIMARY KEY, [date] DATETIME, empcode INT,[file] VARCHAR(10));
INSERT INTO dbo.forgerock
VALUES
    (1, '2015-12-31 01:20:02', 56, 'abc1'),
    (2, '2016-01-01 01:20:02', 58, 'abc2'),
    (3, '2016-01-02 01:20:02', 46, 'abc3'),
    (4, '2016-01-03 01:20:02', 16, 'abc4'),
    (5, '2016-01-04 01:20:02', 36, 'abc5');

IF OBJECT_ID('dbo.forge', 'U') IS NOT NULL
    DROP TABLE dbo.forge

CREATE TABLE dbo.forge (empcode INT PRIMARY KEY, [user_name] VARCHAR(10));
INSERT INTO dbo.forge
VALUES (56, 'ram'),(58, 'ram1'),(46, 'ram2'),(16, 'ram3'),(36, 'ram4')

DECLARE @dt DATETIME = FLOOR(CAST(GETDATE() AS FLOAT))

SELECT *
FROM dbo.forge
WHERE empcode IN (
        SELECT f.empcode
        FROM dbo.forgerock f
        WHERE f.[date] BETWEEN DATEADD(DAY, -1, @dt) AND @dt
    )

输出 -

empcode     user_name
----------- ----------
16          ram3

答案 1 :(得分:0)

SELECT fr.file, f.user_name 
FROM forgerock fr inner join forge f on fr.empcode = f.empcode
WHERE fr.date >= DATE_ADD(NOW(), INTERVAL -1 DAY)

答案 2 :(得分:0)

您可以使用datediff来获取两个日期之间的差异。 试试这个:

ResultSet resultset = statement.executeQuery("select file  from forgerock where DATEDIFF(day, GETDATE(), '" + date + "') >= 1") ;

要测试查询,请使用以下内容:

SELECT * FROM forgerock WHERE DATEDIFF(day, GETDATE(), @date) >= 1;

只需将@date替换为您想要的值,例如'2016-01-02'

答案 3 :(得分:0)

使用此过滤器:

SELECT [file]
FROM forgerock 
WHERE [date] >= DATEADD(DAY, DATEDIFF(DAY,0,GETDATE()-1),0)

上面的DATEADD表达式将始终在昨天上午12:00返回,允许您的查询仅返回昨天或今天的记录。

奖励提示:避免使用保留关键字(例如filedate)作为列名或表名。

答案 4 :(得分:0)

由于我使用ms sql,代码应该是以下方式

 SELECT fr.file, f.user_name FROM forgerock fr inner join forge f on fr.empcode = f.empcodewhere [date] >= DATEADD(DAY, DATEDIFF(DAY,0,GETDATE()-1),0)

将导致从forgerock打印两个表文件,从forge

打印user_name

答案 5 :(得分:-1)

您必须尝试以下查询: -

SELECT fr.file, f.user_name 
FROM forgerock fr inner join forge f on fr.empcode = f.empcode
AND `date' >= (DATE_ADD(`date`, INTERVAL 1 day))