Sql 在两个日期之间选择一个日期

Sql 在两个日期之间选择一个日期,sql,oracle,Sql,Oracle,我希望有人能帮助我,我是sql数据库的新手。 我有下表: -------------------------------------- id from to version --------------------------------------- 0 01.01.70 31.12.79 v1 1 01.01.80 31.12.89 v2 现在我想达到以下行为: 当用户选择某个日

我希望有人能帮助我,我是sql数据库的新手。 我有下表:

--------------------------------------
id      from         to        version
---------------------------------------
0        01.01.70    31.12.79     v1    
1        01.01.80    31.12.89     v2    
现在我想达到以下行为:

当用户选择某个日期时,应返回版本,其中所选用户日期介于相应的
from
to
日期之间

示例:

user_date = 01.01.70 ------> v1 should be returned
user_date = 01.01.75 ------> v1 should be returned
user_date = 31.12.79 ------> v1 should be returned
user_date = 01.01.80 ------> v2 should be returned
user_date = 01.01.85 ------> v2 should be returned
user_date = 31.12.89 ------> v2 should be returned
我试过这个

select version from versions_table where user_date between from and to;

对于列名来说,中的
可能是个坏主意。
您可以测试此SQL查询:

SELECT version 
FROM versions_table 
WHERE user_date between versions_table.from 
      AND versions_table.to;

有了这一点,您表示您的意思是表
versions\u table
中的列,而不是关键字
from
from
对于列名来说可能是个坏主意。 您可以测试此SQL查询:

SELECT version 
FROM versions_table 
WHERE user_date between versions_table.from 
      AND versions_table.to;
这表示您指的是表
versions\u table
中的列,而不是
中的关键字

    select version from versions_table v where user_date=(select user_date from versions_table a where user_date between v.from and v.to);
试试看。我假设“user\u date”是versions\u表中的一列

    select version from versions_table v where user_date=(select user_date from versions_table a where user_date between v.from and v.to);

您需要将一个变量传递到查询中——这取决于您的编程语言,这很容易实现。替代品

select version
from versions_table
where to_date('<myInputDate>', 'dd.mm.yy') between to_date('from', 'mm.dd.yy') and to_date('to', 'mm.dd.yy');
选择版本
从表格
其中,截止日期(年月日)介于截止日期(年月日)和截止日期(年月日)之间;
确保将您感兴趣的日期替换为(无插入符号“”)


[编辑]如果您不确定它们的日期,它将执行字母顺序,这将导致查询出现问题。

您需要向查询中传递一个变量-这取决于您的编程语言,很容易实现。替代品

select version
from versions_table
where to_date('<myInputDate>', 'dd.mm.yy') between to_date('from', 'mm.dd.yy') and to_date('to', 'mm.dd.yy');
选择版本
从表格
其中,截止日期(年月日)介于截止日期(年月日)和截止日期(年月日)之间;
确保将您感兴趣的日期替换为(无插入符号“”)


[编辑]如果您不确定它们的日期,它将执行字母顺序,这将导致查询出现问题。

您尝试的结果是什么?开始日期和结束日期的数据类型是什么?您尝试的结果是什么?开始日期和结束日期的数据类型是什么?或者只需将括号括起来
[from]
[to]
好的,那将是另一种方式,谢谢@阿内拉维斯不在甲骨文中。您可以使用双引号代替,尽管OP随后需要使用正确的大写和双引号引用该字段。将列名更改为from _date和to _date这样的名称要容易得多。或者只需将括号
[from]
[to]
好的,那将是另一种方式,谢谢@阿内拉维斯不在甲骨文中。您可以使用双引号代替,尽管OP随后需要使用正确的大写和双引号引用该字段。将列名更改为from_date和to_date更容易。