0

期待どおりに単一のレコードを返す次の SQL ステートメントがあります。

select * from geodatasource_cities C,
geodatasource_countries D
where C.CC_FIPS = D.CC_FIPS
and D.CC_ISO='AU'
and UCASE(TRIM(C.FULL_NAME_ND)) LIKE '%JAN JUE%';

ただし、次の SQL ステートメントを使用すると、レコードが返されません。LIKE 句を equal to 句に変更しただけです。

select * from geodatasource_cities C,
geodatasource_countries D
where C.CC_FIPS = D.CC_FIPS
and D.CC_ISO='AU'
and UCASE(TRIM(C.FULL_NAME_ND)) = 'JAN JUE';

なぜこれが起こっているのか理解できる人はいますか?

同様に、次のステートメントを使用します。

select LENGTH(COUNTRY_NAME),
LENGTH('Australia'),
COUNTRY_NAME
from countries
WHERE UCASE(TRIM(COUNTRY_NAME)) LIKE '%AUSTRALIA%'

戻り値:

10 | 9 | オーストラリア

編集

データのインポートに使用した SQL のサンプルを次に示します。

load data local infile 'CITIES.TXT'
into table geodatasource_cities
fields terminated by '\t'
lines terminated by '\n'
(CC_FIPS,FULL_NAME_ND);

\n が私のデータに大混乱をもたらしているようです。明日、別のオプションでインポートしてみます。

4

1 に答える 1

1

2 番目のケースでは、データベースで完全に一致する必要がありますが、最初のケースでは、名前に文字列「JAN JUE」が含まれている必要があります。データベース内の氏名は正確に「JAN JUE」ですか? また、ケーシングを確認する必要がある場合もあります。MS-SQL では、比較のために大文字と小文字の好みの処理を指定できることを知っています。一方の選択では大文字と小文字が区別されますが、他方では区別されません。

MySql の like 句に関する注意事項: http://www.mysqltutorial.org/sql-like-mysql.aspx

編集

MySql Trim() はスペースのみを削除します。そのため、ラインブレイクが発生する可能性があります。(改行しないスペースの場合もあります。トリムによってそれらも削除されるかどうかをテストする必要がある場合があります。それに関する決定的な答えが見つかりません。)もう1つのフィールドで異なる長さを取得しているため、チェックすることをお勧めしますデータの末尾にそのような隠し文字が含まれていないことを確認してください。

この問題は、このスタック オーバーフローの質問で説明されています: MySQL TRIM 関数は改行やキャリッジ リターンをトリムしませんか?

于 2010-05-11T15:22:30.700 に答える