标签: between

sql:BETWEEN v1和v2

在SQL Server上的BETWEEN查询中,v1和v2的顺序是否有差异?

SELECT *
  FROM table
 WHERE col BETWEEN v1 AND v2
Run Code Online (Sandbox Code Playgroud)

如果v1大于v2,目前我没有得到任何结果.这只是语法糖吗?

col >= v1 AND col <= v2
Run Code Online (Sandbox Code Playgroud)

或者它真的取两者之间的所有价值?根据我目前的观察,我猜这是第一种情况.

sql-server between syntactic-sugar

5
推荐指数
2
解决办法
4762
查看次数

MySQL在日期范围内汇总值

我有一个表,每行包含一个日期和一些任意的数值.我需要将此值与特定但动态的日期间隔相加.

SELECT VERSION();
5.0.51a-24+lenny5

CREATE TABLE IF NOT EXISTS `work_entries` (
  `entry_id` int(10) unsigned NOT NULL auto_increment,
  `employee_id` tinyint(3) unsigned NOT NULL,
  `work_date` date NOT NULL,
  `hour_count` tinyint(3) unsigned NOT NULL,
  PRIMARY KEY  (`entry_id`)
);

INSERT INTO `work_entries` (`entry_id`, `employee_id`, `work_date`, `hour_count`) VALUES
(1, 1, '2011-04-25', 2),
(2, 1, '2011-04-26', 3),
(3, 1, '2011-04-27', 1),
(4, 2, '2011-04-25', 2),
(5, 2, '2011-04-27', 4),
(6, 1, '2011-05-08', 2),
(7, 2, '2011-05-06', 8),
(8, 2, '2011-05-08', 9),
(9, 2, '2011-05-09', 1),
(10, …
Run Code Online (Sandbox Code Playgroud)

mysql date between

5
推荐指数
1
解决办法
8663
查看次数

SQL查询多个范围而不使用多个OR子句(嵌套LIKE,BETWEEN)

我通常必须查询一个非常大的表,查找每个变量有多个条件的多个变量.通常,需要在多个范围内查询变量.例如,我可能需要VAR_1的所有记录,其中VAR_1在200-300,350-400,450-500之间.

通常我会写如下,但有人告诉我使用IN()而不是多个OR会更有效率.

SELECT * FROM table
WHERE VAR_1 BETWEEN '200' AND '300' OR
      VAR_1 BETWEEN '350' AND '400' OR
      VAR_1 BETWEEN '450' AND '500'
Run Code Online (Sandbox Code Playgroud)

有没有办法压缩这些信息,并OR通过嵌套LIKEBETWEEN条款摆脱s IN()?有点像:

WHERE VAR_1 IN (BETWEEN '200' AND '300', BETWEEN '350' AND '400', BETWEEN '450' AND '500')

要么

WHERE VAR_1 IN ('[200-300]','[350-400]','[450-500]')

我尝试过这样的东西,但语法显然不正确.您可以指出我的任何想法或方向都很棒,对SQL来说仍然是新手.

sql performance between

5
推荐指数
1
解决办法
9703
查看次数

在mysql中存储在varchar中的日期之间搜索数据

我存储我列server_date_time日期中varchardd/mm/yyyy格式,我想,所以我必须使用的查询来获取一些日期之间躺在记录

    select * from activity_emp 
where date_format(str_to_date(substr(server_date_time,1,10),'%d/%m/%Y'),'%d/%m/%Y')>=
'29/09/2012'
    and date_format(str_to_date(substr(server_date_time,1,10),'%d/%m/%Y'),'%d/%m/%Y')<=
'07/10/2012';
Run Code Online (Sandbox Code Playgroud)

我已varchar在查询中转换为字符串,但我的查询返回的查询数据仅与29/09/2012和30/09/2012相关.它还应该返回10月份的查询

mysql compare date between

5
推荐指数
2
解决办法
1万
查看次数

在Date语句之间优化Oracle

我有一个oracle SQL查询,它选择当天的条目,如下所示:

SELECT   [fields] 
FROM     MY_TABLE T 
WHERE    T.EVT_END BETWEEN TRUNC(SYSDATE) 
                       AND TRUNC(SYSDATE) + 86399/86400
  AND    T.TYPE = 123
Run Code Online (Sandbox Code Playgroud)

而该EVT_END领域是类型的DATE,T.TYPE是一个NUMBER(15,0).

我确信随着表数据(和持续时间)的大小增加,日期约束将使结果集减少比类型约束大得多的因子.(因为类型非常有限)

所以出现的基本问题是,选择在当前日期选择更快的最佳指标是什么.我特别想知道函数索引对TRUNC(T.EVT_END)正常索引的优缺点是什么T.EVT_END.使用功能索引时,查询看起来像这样:

SELECT   [fields] 
FROM     MY_TABLE T 
WHERE    TRUNC(T.EVT_END) = TRUNC(SYSDATE) 
  AND    T.TYPE = 123
Run Code Online (Sandbox Code Playgroud)

因为其他查询使用提到的日期约束而没有额外的类型选择(或者可能包含其他一些字段),因此多列索引对我没有多大帮助.

谢谢,我很感激你的提示.

sql oracle indexing between

5
推荐指数
1
解决办法
1万
查看次数

查找2列之间是否存在phonenumbers

我正在尝试使用TSQL传递两个10位数的电话号码块.

让我们说:

TelephoneNumber1: 1234560095
TelephoneNumber2: 1234561005
Run Code Online (Sandbox Code Playgroud)

我的表由3列组成:

ID, StartBlock, EndBlock
1, 5671231000, 5671232000
2, 1234561000, 1234562000
3, 2175551200, 2175551300
Run Code Online (Sandbox Code Playgroud)

所以我要做的是找到之间的所有数字TelephoneNumber1,TelephoneNumber2并查看它之间StartBlockEndBlock表中的任何记录之间是否存在.

在这个例子中,它会在第二个记录中找到一个已经在使用的数字,因为当它1234560095到达时1234561000,它会在已经在使用中找到它.

如何完成此操作以查找StartBlock和EndBlock之间正在使用的数字?

sql t-sql loops between

5
推荐指数
1
解决办法
971
查看次数

MySQL使用BETWEEN与NULL进行比较

我有一个查询,其中where条件如下:

WHERE A.event_date BETWEEN B.start_date AND B.end_date
Run Code Online (Sandbox Code Playgroud)

复杂性是,如果B.start_date是NULL,则意味着从远古时代开始,同样B.end_date是NULL,它意味着现在.所以,我还是要选择一排,其中A.event_date > B.start_dateB.end_dateNULL,例如.

这种冗长的方式是

WHERE A.event_date BETWEEN B.start_date AND B.end_date
   OR (A.event_date > B.start_date AND B.end_date IS NULL)
   OR (B.start_date IS NULL AND A.event_date < B.end_date)
Run Code Online (Sandbox Code Playgroud)

有没有更优雅的解决方案(特别是因为在一个查询中我有多个这样的条件)

mysql null between

5
推荐指数
2
解决办法
3457
查看次数

SQL-之间的联接与之间的联接

几周前,我做了一个查询(不记得要做什么),它涉及到BETWEEN运算符。刚开始,我在WHERE子句中使用了它,但是它没有产生正确的结果集(再次,我不记得问题出在哪里)。我考虑了为什么,最后得出结论,我不得不将其移至该JOIN条款。

例如

“原始”查询:

SELECT --something
FROM table1 a
/*type of*/ JOIN table2 b ON a.field = b.field
WHERE b.field2 BETWEEN a.field2 AND a.field3 /*some other conditions*/
Run Code Online (Sandbox Code Playgroud)

修改后的查询:

SELECT --something
FROM table1 a
/*type of*/ JOIN table2 b ON a.field = b.field 
                       AND b.field2 BETWEEN a.field2 AND a.field3
WHERE /*some other conditions*/
Run Code Online (Sandbox Code Playgroud)

JOIN版本相比,该版本返回的结果集较小WHERE,并且该JOIN版本产生了正确的结果集,而WHERE没有。

我现在要问的原因是因为当时我什么都没想到,但是今天老板问我为什么要这样做(针对完全不同的查询),我告诉他我上次做过的经历,两者他和我对这两种用法之间的差异很感兴趣。

从我的观点来看,为什么一个版本产生与另一个WHERE版本不同的原因是,子句版本仅选择了一系列数据,而该JOIN版本则寻找了一系列要连接的数据。是这样吗 或者,我确实遇到了受其余查询影响的独特体验(查询比示例复杂得多)。

编辑 我不同意可能的重复内容,因为我的内容专门针对该BETWEEN …

sql sql-server join between where

5
推荐指数
1
解决办法
2万
查看次数

JOOQ如何查询日期之间

我在我的项目中使用jooq,我需要在两个日期之间查询一些数据.

生成正确数据的sql查询是

select created_on from queue_token where created_on between '2015-07-16' and '2015-07-17' and token_queue_id=1;
Run Code Online (Sandbox Code Playgroud)

我写的等效jooq查询在下面,但没有给出所需的结果

 create.select().from(com.database.tables.QueueToken.QUEUE_TOKEN)
                   .where(com.database.tables.QueueToken.QUEUE_TOKEN.TOKEN_QUEUE_ID.equal(1))
                    .and(com.database.tables.QueueToken.QUEUE_TOKEN.CREATED_ON.between(new Timestamp(fromDate.getTime())).and(new Timestamp(toDate.getTime())))
                    .fetch();
Run Code Online (Sandbox Code Playgroud)

jooq查询生成结果,但只生成与fromDate完全匹配的记录.所以基本上它不适用于日期范围.

有人可以帮忙吗?

mysql sql date between jooq

5
推荐指数
1
解决办法
2117
查看次数

SQL Server 2008 BETWEEN函数

这是我的代码:

DECLARE @d1 DATETIME
DECLARE @d2 DATETIME

SET @d1 = '2015-01-01 00:00:00'
SET @d2 = '2015-12-31 23:59:59.999'

SELECT 
    CASE 
       WHEN ('2016-01-01 00:00:00' BETWEEN @d1 AND @d2) 
          THEN 'is between' 
          ELSE 'not between'
    END  AS BetweenOrNotBetween
Run Code Online (Sandbox Code Playgroud)

我在这里提供的日期比函数的范围 1毫秒BETWEEN,在我的SQL 2008服务器实例上,结果是'介于'之间而不是预期的'不介于'之间 ...

这是一个错误,还是由于某些我没有看到的原因而在设计中是必要的妥协?

是的,只要我在2016-01-01午夜之后加上一小段时间,我就会得到预期的'不在'之间的结果.

sql datetime between sql-server-2008

5
推荐指数
1
解决办法
84
查看次数