SQL Server:联接和位置

时间:2018-10-01 14:42:11

标签: sql sql-server

我正在尝试根据两个表之间匹配的特定值创建一个新表,并且效果很好,但是当我尝试按日期过滤新加入的表时,问题就来了。

CREATE TABLE JoinedValuesTable
(
     [Ref] INT IDENTITY(1,1) PRIMARY KEY,
     [Parties] CHAR(50),
     [Accounts] CHAR(50),
     [Amount] FLOAT
);

上面的表已经创建好了,我通过将两个这样的表连接起来,将插入值连接到其中。...

INSERT INTO JoinedValuesTable ([Parties], [Accounts], [Amount])
    SELECT 
        InputPerson.[PARTY], Input_Y.[R_Account_1], InputPerson.[Amount] 
    FROM 
        InputPerson
    JOIN 
        Input_Y ON InputPerson.[Action] = Input_Y.[Action]

这很好,当我尝试按日期过滤似乎不起作用时。...

INSERT INTO JoinedValuesTable([Parties], [Accounts], [Amount])
    SELECT 
        InputPerson.[PARTY], Input_Y.[R_Account_1], InputPerson.[Amount] 
    FROM 
        InputPerson
    JOIN 
        Input_Y ON InputPerson.[Action] = Input_Y.[Action]
    WHERE 
        InputPerson.[Date] BETWEEN '2018-01-01' AND '2018-03-03'

我在新表中没有任何值。任何人有任何想法吗?

2 个答案:

答案 0 :(得分:3)

请勿使用between作为日期。更好的方法是:

WHERE InputPerson.[Date] >= '2018-01-01' AND
      InputPerson.[Date] < '2018-03-04'

我强烈推荐亚伦·伯特兰(Aaron Bertrand)关于此主题的博客: What do BETWEEN and the devil have in common?

这假定Date被存储为日期/时间列。如果是字符串,则需要使用适当的转换函数将其转换为日期。

答案 1 :(得分:0)

先前回答的无耻复制/粘贴:

BETWEEN CONVERT(datetime,'2018-01-01') AND CONVERT(datetime,'2018-03-03')

原始答案:Datetime BETWEEN statement not working in SQL Server

我怀疑日期时间与字符串是罪魁祸首。结果(没有插入):

SELECT InputPerson.[PARTY], Input_Y.[R_1], Input_Y.[R_Account_1], InputPerson.[Amount] 
FROM InputPerson
JOIN Input_Y ON InputPerson.[Action] = Input_Y.[Action]
WHERE InputPerson.[Date] BETWEEN CONVERT(datetime,'2018-01-01') AND CONVERT(datetime,'2018-03-03')

-编辑(在Olivier的评论后)-

您确定选择语句返回结果吗?也许“内部联接”与“从句”相结合会导致结果集为空。