2

誰かがこの小さな仕事を手伝ってくれませんか? 私が必要としているのは、テーブル「a」から文字列内の重複した文字 (行内) を検索し、その後、重複した文字列の ID だけで新しいテーブル「b」を作成できるストアド プロシージャです。

このようなもの:

表 A

ID Name   
1  Matt
2  Daave
3  Toom
4  Mike
5  Eddie

Daaveそして、そのテーブルから、 、Toom、の文字が重複していることがわかりますEddie。新しいテーブルを作成して、それらの ID のみをリストしたいと思います。何かのようなもの:

表 B

ID     
2
3
5

名前に重複した文字が含まれる文字列の ID であるため、2,3,5 のみです。

これが理解できることを願っており、どんな助けにも非常に感謝しています.

4

4 に答える 4

4

ストアド プロシージャを使用した回答では、2 つの間違いがあります。1 つは列名と LIKE 句の間にスペースがありません。もう 1 つは検索パラメータの周りに一重引用符がありません。

最初に、文字列に重複した文字が含まれている場合に 1 を返すユーザー定義のスカラー関数を作成します。

編集済み

CREATE FUNCTION FindDuplicateLetters
(
    @String NVARCHAR(50)
)
RETURNS BIT
AS
BEGIN

    DECLARE @Result BIT = 0 
    DECLARE @Counter INT = 1

    WHILE (@Counter <= LEN(@String) - 1) 
    BEGIN


    IF(ASCII((SELECT SUBSTRING(@String, @Counter, 1))) = ASCII((SELECT SUBSTRING(@String, @Counter + 1, 1))))
        BEGIN
             SET @Result = 1
             BREAK
        END


        SET @Counter = @Counter + 1 
    END

    RETURN @Result

END
GO

関数が作成されたら、次のような単純なSELECTクエリから呼び出すだけです。

SELECT 
    * 
FROM
    (SELECT 
        *, 
        dbo.FindDuplicateLetters(ColumnName) AS Duplicates
    FROM TableName) AS a
WHERE a.Duplicates = 1

この組み合わせでは、文字が重複している行だけが取得されます。

于 2013-01-29T15:00:34.667 に答える
3

SQL のどのバージョンでも、ブルート フォース アプローチでこれを行うことができます。

select *
from t
where t.name like '%aa%' or
      t.name like '%bb%' or
      . . .
      t.name like '%zz%'

大文字と小文字を区別する照合がある場合は、次を使用します。

where lower(t.name) like '%aa%' or
      . . .
于 2013-01-29T03:15:22.063 に答える