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 子句更改为等于子句:

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

在第二种情况下,您需要在数据库中完全匹配,而在第一种情况下,名称必须包含字符串“JAN JUE”。数据库中的全名是否正是“JAN JUE”?您可能还需要检查您的外壳。我知道对于 MS-SQL,您可以指定首选的套管处理方式以进行比较。一种选择可能区分大小写,而另一种则不区分大小写。

关于 MySql 中 like 子句的注意事项: http ://www.mysqltutorial.org/sql-like-mysql.aspx

编辑

MySql Trim() 只删除空格。所以你可以换行。(也可能是非中断空格,您可能需要测试 trim 是否也删除了这些空格,找不到明确的答案。)由于您在另一个字段上获得不同的长度,我建议检查以确保您的数据没有像这样的尾随隐藏字符。

这个问题在这个堆栈溢出问题中讨论过: MySQL TRIM 函数是否不修剪换行符或回车符?

于 2010-05-11T15:22:30.700 回答