我想编写一个SQL查询来获取所有住在特定邮政编码中的学生。以下是我的询问。
SELECT * FROM `students` AS ss WHERE ss.`postcode` LIKE 'SE4 1NA';
现在的问题是,在数据库中保存了一些记录而没有空格是邮政编码,如SE41NA
,有些也可能是小写的,如se41na
或se4 1na
。
查询根据记录的保存方式给出了不同的结果。有什么办法可以解决这个问题吗?
答案 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$';
匹配可选的空格字符。
答案 1 :(得分:2)
案例是否重要取决于字符串/列/数据库/服务器的排序规则。但是,您可以通过以下方式解决这个问题:
WHERE UPPER(ss.postcode) LIKE 'SE4%1NA'
%
将匹配任意数量的字符,包括无字符。对于你真正需要的东西来说,它有点过于笼统 - 但它在实践中应该可以正常工作。
更重要的问题是您的数据库不会验证放入其中的数据。您应该修复应用程序,以便邮政编码正确并遵循标准格式。
答案 2 :(得分:2)
使用UPPER
和REPLACE
的组合。
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' ;