如何在sql中处理空格

时间:2016-07-25 14:08:07

标签: mysql sql

我想编写一个SQL查询来获取所有住在特定邮政编码中的学生。以下是我的询问。

SELECT * FROM `students` AS ss WHERE ss.`postcode` LIKE 'SE4 1NA';

现在的问题是,在数据库中保存了一些记录而没有空格是邮政编码,如SE41NA,有些也可能是小写的,如se41nase4 1na

查询根据记录的保存方式给出了不同的结果。有什么办法可以解决这个问题吗?

5 个答案:

答案 0 :(得分:3)

使用 ' If source worksheet is not empty and if the last ' row >= StartRow, copy the range. If shLast > 0 And shLast >= StartRow Then 'Set the range that you want to copy 'Set CopyRng = sh.Range(sh.Rows(StartRow), sh.Rows(shLast)) For Each cell In sh.Range("N4:N4") If (cell.Value <> "") Then Set CopyRng = '(trying to copy the entire row here..) End If Next 是一种方法。默认情况下,这会执行不区分大小写的匹配。

regexp

SELECT * FROM students AS ss WHERE ss.postcode REGEXP '^SE4[[:space:]]?1NA$'; 匹配可选的空格字符。

REGEXP documentation MySQL

答案 1 :(得分:2)

案例是否重要取决于字符串/列/数据库/服务器的排序规则。但是,您可以通过以下方式解决这个问题:

WHERE UPPER(ss.postcode) LIKE 'SE4%1NA'

%将匹配任意数量的字符,包括无字符。对于你真正需要的东西来说,它有点过于笼统 - 但它在实践中应该可以正常工作。

更重要的问题是您的数据库不会验证放入其中的数据。您应该修复应用程序,以便邮政编码正确并遵循标准格式。

答案 2 :(得分:2)

使用UPPERREPLACE的组合。

SELECT * 
FROM students s 
WHERE UPPER(REPLACE(s.postcode, ' ', '')) LIKE '%SE41NA%'

答案 3 :(得分:0)

SELECT * 
  FROM students AS ss 
 WHERE UPPER(ss.postcode) LIKE SELECT REPLACE(UPPER('SE4 1NA'), ' ', '%'); ;

我建议使用替换为'%'占位符的空格。同时将LIKE运算符

的两边的大小写转换为大写

答案 4 :(得分:0)

SELECT * FROM students AS ss 
  WHERE UPPER(REPLACE(ss.postcode, ' ', '')) = 'SE41NA' ;