2011-01-31 11 views
0

6つの数字の2つの項目を比較しようとしています。それぞれの数字は0または1(つまり100001または011101)です。出力は.5になります。6のうち2つが一致する場合は、出力を.33などにします。MySQLの文字列の比較(位置が非常に重要)

注意事項は、両方のエントリが1の位置第二の位置に0を持っているなどここで

SQLはテーブル

CREATE TABLE sim 
(sim_key int, 
string int); 

INSERT INTO sim (sim_key, string) 
VALUES (1, 111000); 

INSERT INTO sim (sim_key, string) 
VALUES (2, 101101); 
に作成するコマンドです

キャラクタの50%を共有する2つの文字列を比較し、50%を出力するために必要な出力。

SQLでこのような比較を行うことはできますか?事前に感謝します

+0

は、機能のための仕事のようですね。 –

+0

私はSQLに慣れていません、どのような機能について話していますか? – Spencer

答えて

2

この例を見てください。

CREATE TABLE sim  (sim_key int,  string int); 
INSERT INTO sim (sim_key, string)  VALUES (1, 111000); 
INSERT INTO sim (sim_key, string)  VALUES (2, 101101); 

select a.string A, b.string B, 
    sum(case when Substring(A.string,Pos,1) = Substring(B.string,Pos,1) then 1 else 0 end) Matches, 
    count(*) as RowCount, 
    (sum(case when Substring(A.string,Pos,1) = Substring(B.string,Pos,1) then 1 else 0 end)/
    count(*) * 100.0) as PercentMatch 
from sim A 
cross join sim B 
inner join (
    select 1 Pos union all select 2 union all select 3 
    union all select 4 union all select 5 union all select 6) P 
     on P.Pos between 1 and length(A.string) 
where A.sim_key= 1 and B.sim_key = 2 
group by a.string, b.string 

これは粗末なものであり、おそらく必要以上に含まれていますが、どのように行うことができるかを示しています。 numbersテーブルを作成する方が良いです.1から1000程度の数字だけで、数値シーケンスが必要な多くのクエリで繰り返し使用できます。

1

10010101を整数として保持する代わりに、使用するビット論理ANDを比較するときにこのバイナリバージョンを真の整数に変換する代わりに、結果をバイナリに変換して ' 1' どのように多くの試合...

への変換のために:比較のためにhttp://dev.mysql.com/doc/refman/5.5/en/binary-varbinary.html

http://dev.mysql.com/doc/refman/5.5/en/bit-functions.htmlビット単位のAND

...

+0

私はSQLの初心者ですが、これはどういう意味ですか? – Spencer

+0

どのような関数をバイナリで変換する必要がありますか、どのように比較すればよいですか? – Spencer