3

列(registration_no varchar(9))を持つテーブルがあります。サンプルは次のとおりです。

id  registration no
1   42400065
2   483877668
3   019000702
4   837478848
5   464657588
6   19000702
7   042400065

(042400065)や(42400065)のような登録番号に注意してください。これらはほとんど同じで、違いは先行ゼロだけです。

上記と同じ大文字小文字の登録番号をすべて選択し、先行ゼロのない登録番号を削除したい(42400065)

pls、先行ゼロのないもの(42400065)を削除する前に、先行ゼロ(042400065)と同等のものがあることを確認する必要があることにも注意してください

4

4 に答える 4

2
declare @T table
(
  id int,
  [registration no] varchar(9)
)

insert into @T values
(1,   '42400065'),
(2,   '483877668'),
(3,   '019000702'),
(4,   '837478848'),
(5,   '464657588'),
(6,   '19000702'),
(7,   '042400065')

;with C as
(
  select row_number() over(partition by cast([registration no] as int) 
                           order by [registration no]) as rn
  from @T
)
delete from C
where rn > 1
于 2011-09-17T17:14:49.713 に答える
0
create table temp id int;
insert into temp select id from your_table a where left (registration_no, ) = '0' and 
   exists select id from your_table 
              where a.registration_no = concat ('0', registration_no)

delete from your_table where id in (select id from temp);

drop table temp;
于 2011-09-17T16:08:34.270 に答える
0

単一の DELETE ステートメントでこれを行うことができると思います。JOIN により、重複のみが削除されることが保証され、制約により、「0」で始まらない登録番号によってさらに制限されます。

DELETE 
    r1
FROM
    Registration r1
JOIN
    Registration r2 ON RIGHT(r1.RegistrationNumber, 8) = r2.RegistrationNumber
WHERE
    LEFT(r1.RegistrationNumber, 1) <> '0'

上記の DELETE を実行すると、テーブルは次のようになります。SQL Server 2008 インスタンスでテストしました。

ID          RegistrationNumber
----------- ------------------
2           483877668
3           019000702
4           837478848
5           464657588
7           042400065
于 2011-09-17T16:17:11.677 に答える
0

この解決策は、登録番号が特定の長さであることに依存しません。同じ整数であるが同じ値ではないものを検索し (先行ゼロのため)、「0」を持つエントリを選択します。最初のキャラクターとして。

DELETE r
FROM Registration AS r
JOIN Registration AS r1 ON r.RegistrationNo = CAST(r1.RegistrationNo AS INT)
    AND r.RegistrationNo <> r1.RegistrationNo
WHERE CHARINDEX('0',r.registrationno) = 1
于 2011-09-17T16:44:27.030 に答える