5

TSQLを使用して2つの10桁の電話番号ブロックを渡そうとしています。

まあ言ってみれば:

TelephoneNumber1: 1234560095
TelephoneNumber2: 1234561005

私のテーブルは3つの列で構成されています:

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

だから私がやろうとしているのは、との間のすべての数字を見つけて、それがテーブルの間TelephoneNumber1とテーブル内のレコードの間にTelephoneNumber2存在するかどうかを確認することです。StartBlockEndBlock

この例では、に到達するとすでに使用されている番号が見つかるため、2番目のレコードですでに使用されている番号12345600951234561000見つかります。

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 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 に答える
1

これはあなたが探しているものですか?

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

結果

| ID | スタートブロック| エンドブロック|
--------------------------------
| 2 | 1234561000 | 1235552000 |

デモを見る

于 2013-01-15T23:05:05.280 に答える
1

これは、次のようにするだけで実行できます。

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

結果:

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

開始ブロックと終了ブロックの間にあるすべてのものを含めて、結果を生成する必要があります。これらのTSQLの例を見てください。ここでは、これを実現する2つの方法を見つけることができます。

ここでデモ

于 2013-01-15T23:17:52.433 に答える