を得るために、私は、フィールド名を持つこのテーブルを持っています。私はそのファイルを必要としませんSQL Serverの/ TSQL:短い名前が悪い</p> <pre><code>TABLE Name WANTED: ----------------- Done This Barcel Barcelona This Paris Parisinos This </code></pre> <p>:クエリは、大きな名前の行
SQL Serverのクエリはどちらですか?
を得るために、私は、フィールド名を持つこのテーブルを持っています。私はそのファイルを必要としませんSQL Serverの/ TSQL:短い名前が悪い</p> <pre><code>TABLE Name WANTED: ----------------- Done This Barcel Barcelona This Paris Parisinos This </code></pre> <p>:クエリは、大きな名前の行
SQL Serverのクエリはどちらですか?
重複をどのように処理するかはわかりませんが、これによって必要な結果が得られます。
これはあなたが持っているデータのために働くだろうDECLARE @Name TABLE (
Name VARCHAR(20)
)
INSERT INTO @Name SELECT 'Done'
INSERT INTO @Name SELECT 'Barcel'
INSERT INTO @Name SELECT 'Barcelona'
INSERT INTO @Name SELECT 'Paris'
INSERT INTO @Name SELECT 'Parisinos'
DELETE t2
from @Name t1
INNER JOIN @Name t2 ON t1.Name LIKE t2.Name + '%'
AND t1.Name<>t2.Name
SELECT * FROM @Name
:
サンプルデータ:
IF OBJECT_ID('tempdb..#Names') IS NOT NULL
DROP TABLE #Names;
CREATE TABLE #Names(Name VARCHAR(100));
INSERT INTO #Names
VALUES
('Done'),
('Barcel'),
('Barcelona'),
('Paris'),
('Parisinos');
はQUERY:
WITH CTE
AS (SELECT A.Name
, B.Name AS B_NAME
, ROW_NUMBER() OVER(PARTITION BY B.Name ORDER BY A.Name DESC) AS RN
FROM #Names AS A
LEFT OUTER JOIN #Names AS B ON A.Name LIKE B.Name+'%')
SELECT DISTINCT
Name
FROM CTE
WHERE RN = 1;
結果:
しかし、あなたは以下の持っている場合:
IF OBJECT_ID('tempdb..#Names') IS NOT NULL
DROP TABLE #Names;
CREATE TABLE #Names(Name VARCHAR(100));
INSERT INTO #Names
VALUES
('Done'),
('Barcel'),
('Barcelona'),
('Paris'),
('Parisinos'),
('Parisians');
私はあなたがそれを処理したいかどうかはわかりません。
私はこのクエリを実行し、私のデータベースで動作します。それは '完了'の名前も考慮されていますか? 'done'は正しい結果です – David
いいえ、私が知る限り、「完了」は含まれません。私は '%'がそれを "0"の余分な文字にもマッチさせると信じています。少なくとも1文字の削除が行われるようにしてください。 –
https://msdn.microsoft.com/en-us/library/ms179859.aspxを参照してください。基本的に '_%' –