我输出由两个单独的数据表中的信息组成的发票,这些数据表由唯一的ID#链接。我需要更新一组发票(table_B中包含的服务信息)中提供的服务,仅限于特定日期(table_A中包含的日期信息)。
这是我加入的两张桌子
表-A
ID------|Name-----------------|Date----------|Total--------|
1-------|--ABC Company--------|--1/1/17------|--$50--------|
2-------|--John Smith---------|--3/1/17------|--$240-------|
3-------|--Mary Jones---------|--2/1/16------|--$320-------|
1-------|--ABC Company--------|--8/1/16------|--$500-------|
表-B
Table_ID (= ID Table_A)----|-Service-----------|Unit Price--|Qty------|
1--------------------------|--Service A--------|--$50.00----|--10-----|
--
2--------------------------|--Service B--------|--$20.00----|--12-----|
--
3--------------------------|--Service B--------|--$20.00----|--16-----|
--
1--------------------------|--Service A--------|--$50.00----|--10-----|
我可以使用以下方法加入这两个表:
从Table_B中选择* b内连接Table_A a on b.Table_ID = a.ID
结果如下:
结果
Table_ID-|-Service-----|-Unit Price-|-Qty-|-ID--|-Name-----|-Date----|Total--|
1--------|-Service A- |$50.00------|-10--|-1---|-ABC Co.--|-1/1/17--|$500--|
2--------|-Service B- |$20.00------|-12--|-2---|-John S.--|-3/1/17--|$240--|
3--------|-Service B- |$20.00------|-16--|-3---|-Mary J.--|-2/1/16--|$320--|
1--------|-Service A- |&50.00------|-10--|-1---|-ABC Co.--|-8/1/16--|$500--|
现在,我只想要日期为12/31/16的行。但是,当我为日期添加where子句时(见下文),我的结果不会改变。
Select * from Table_B b inner join Table_A a on b.Table_ID = a.ID where date > 12/31/16
我希望在1/1/17和3/1/17上只提供两行服务。如何在此新连接的表中仅过滤具有特定日期值的行?
答案 0 :(得分:1)
假设您的日期包含在用于存储日期而不是字符串的列中,请尝试确保您传入的日期确实被解释为日期:
SELECT
*
FROM
table_b b
INNER JOIN
table_a a
on b.Table_ID = a.ID
WHERE
a.date > CONVERT(datetime , '20161231' , 112 )
我怀疑SQLSERVER正在将您的约会12/31/16
解释为"十二分为三十一除以十六" - 浮点数约为0.0241935
在内部处理日期的方式,它们可以转换为浮点数,表示自某个时间点以来的天数(和分数),我相信1900年1月1日。因此,你的0.024浮点数代表一个日期在1900年1月1日午夜过后约35分钟..这就是为什么你的结果没有过滤,因为所有日期都满足where子句(它们都晚于01-01-1900 00:35)!
答案 1 :(得分:0)
请测试下面的脚本,它可能会给你预期的输出。
Select *
from Table_B b
inner join Table_A a
on b.Table_ID = a.ID
and date > convert(date , '20161231' , 112 )
答案 2 :(得分:0)
您对当前实施的结果是什么,因为我没有看到您当前查询的任何问题
答案 3 :(得分:-1)
Select *
from Table_B b
inner join Table_A a
on b.Table_ID = a.ID
where date > '12/31/16'
您可以尝试在日期中使用引号。
或者最好的方法是使用
Select *
from Table_B b
inner join Table_A a
on b.Table_ID = a.ID
where Date BETWEEN '12/31/2016' and '1/1/2018'