删除字段内的空格以匹配mysql

时间:2015-08-26 07:01:38

标签: mysql phpmyadmin

我有一个查询

   SELECT 
     course_locations.id as locId,
     courses.arrangements as arrangementStatus
   FROM course_locations
     LEFT JOIN courses ON course_locations.course_id = courses.id
     LEFT JOIN providers ON course_locations.provider_id = providers.id
     LEFT JOIN product_types ON product_types.id = courses.product_type_id
   WHERE 
     courses.arrangements ='0'
     AND providers.activated = 1
     AND course_locations.published_status ='1'
     AND course_locations.postcode IN(
                      SELECT 
                       DISTINCT(Postcode) as post 
                      FROM coordinaten 
                      WHERE FK_Provincie ='10' 
                       AND Latitude IS NOT NULL 
                       AND Longitude IS NOT NULL)

我面临的问题是子查询

    SELECT DISTINCT(Postcode) as post 
    FROM coordinaten 
    WHERE FK_Provincie ='10' 
    AND Latitude IS NOT NULL 
    AND Longitude IS NOT NULL

为我提供了类似'2222AD','1111AE','2542DR'的结果。 但是course_locations.postcode的值类似于'2222 AD','1111 AE','2542 DR'。 它在数字和字母之间有空格,所以当我查询时我无法获得指定的结果。 如果该字段有空格或者它们之间没有空格,是否有任何方法可以获得匹配。 我也无法使用,因为值来自子查询中的逗号分隔。 如果有人知道这个问题,请告诉我

2 个答案:

答案 0 :(得分:0)

您可以使用REPLACE(str,from_str,to_str)功能。

  

返回字符串str,其中出现字符串 from_str   替换为字符串 to_str 。 REPLACE()执行区分大小写的   搜索from_str时匹配。

您的子查询看起来像:

SELECT DISTINCT(REPLACE(Postcode, ' ', '')) as post                                                                          FROM coordinaten
WHERE FK_Provincie ='10'
AND Latitude IS NOT NULL
AND Longitude IS NOT NULL

示例小提琴: http://sqlfiddle.com/#!9/82e5b/2

答案 1 :(得分:0)

正确的方法是清理数据,因此邮政编码格式是一致的。

UPDATE [sometable] SET postcode=REPLACE(postcode,' ','');

从邮政编码中删除空格。

如果选项失败,您可以执行此操作

... WHERE REPLACE(table_A.postcode,' ','') = REPLACE(table_B.postcode,' ','')

但这效率较低,因为必须在每次比较时进行替换,并且它会破坏索引。

您自然只需对邮政编码中可能包含空格的表格进行替换。