5

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

让我们说:

TelephoneNumber1: 1234560095
TelephoneNumber2: 1234561005

我的表由 3 列组成:

ID, StartBlock, EndBlock
1, 5671231000, 5671232000
2, 1234561000, 1234562000
3, 2175551200, 2175551300

所以我要做的是找到TelephoneNumber1和之间的所有数字TelephoneNumber2,看看它是否存在于表之间的任何记录StartBlock之间EndBlock

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

如何在 StartBlock 和 EndBlock 之间找到正在使用的数字?

4

4 回答 4

2
declare @T table
(
  ID int,
  StartBlock bigint, 
  EndBlock bigint
)

insert into @T values
(1, 5671231000, 5671232000),
(2, 1234561000, 1234562000),
(3, 2175551200, 2175551300)

declare @TelephoneNumber1 bigint 
declare @TelephoneNumber2 bigint 

set @TelephoneNumber1 = 1234560095
set @TelephoneNumber2 = 1234561005

select * 
from @T
where StartBlock <= @TelephoneNumber2 and 
      EndBlock >= @TelephoneNumber1
于 2013-01-16T17:52:06.773 回答
1

这可以通过简单地完成:

SELECT * FROM tblName
WHERE StartBlock >= '5671231000' AND EndBlock <= '5671232000'

结果:

| ID | StartBlock | EndBlock |
--------------------------------
| 1  | 5671231000 | 5671232000 |
--------------------------------
| 4  | 5671231120 | 5671231010 |
--------------------------------
| 5  | 5671231540 | 5671231999 |

它应该产生一个带有 start 和 end 块的结果,包括介于两者之间的所有内容。看看这些TSQL 示例,您将找到两种方法来完成此操作。

演示在这里

于 2013-01-15T23:17:52.433 回答
1

这是你要找的吗?

SELECT * FROM tel
WHERE StartBlock <= '1234561005' AND EndBlock >= '1234561005'

结果

| 身份证 | 启动块 | 端块 |
--------------------------------
| 2 | 1234561000 | 1235552000 |

查看演示

于 2013-01-15T23:05:05.280 回答
1

我不确定我是否遗漏了什么,但不仅仅是:

SELECT * from MYTABLE 
WHERE (StartBlock=>TelehoneNumber1 AND StartBlock<=TelephoneNumber2) 
OR (EndBlock=>TelehoneNumber1 AND EndBlock<=TelephoneNumber2)

编辑:只是看着这个,看到 BETWEEN,另一种选择: http ://www.w3schools.com/sql/sql_where.asp

于 2013-01-15T23:03:02.040 回答