基本上我想从列中选择,直到字段中有数字。 例如,我有类似
的邮政编码数据+----------+
| postcode |
+----------+
| RG41 5LY |
| RG7 6LO |
| SW 1AA |
| M 3BV |
+----------+
我希望能够获得第一封信,例如RG,SW,M。因此选择数据直到达到非字母字符。我想这样做,所以我可以用第一个字母
对它进行分组目前我的查询是这样的:
SELECT COUNT(*) as count, postcodeArea FROM Client c
(SELECT UPPER((SUBSTRING_INDEX(postcode, ' ', 1))) AS postcodeArea
它根据第一个空格的列进行分组
谢谢!
答案 0 :(得分:1)
假设您的邮政编码中最多有3个前导字母,您可以尝试:
SELECT COUNT(*) tot, pcode FROM (
SELECT CASE
WHEN postcodearea REGEXP '^[A-Z][A-Z][A-Z].*' THEN SUBSTRING(postcodearea,1,3)
WHEN postcodearea REGEXP '^[A-Z][A-Z].*' THEN SUBSTRING(postcodearea,1,2)
WHEN postcodearea REGEXP '^[A-Z].*' THEN SUBSTRING(postcodearea,1,1)
ELSE '' END AS pcode
FROM client
) e
GROUP BY pcode
答案 1 :(得分:0)
SELECT COUNT(*) as count, postcodeArea REGEXP /^[A-z]+$/ as postarea_code FROM Client c
答案 2 :(得分:0)
我做了一些研究,发现没有办法在SUBSTR_INDEX()上应用正则表达式。在SELECT查询中使用正则表达式的唯一方法就像SELECT postcode REGEXP '[^A-Za-z]' as postarea_code FROM client
。但是它返回0或1以显示行是否匹配。在您的情况下,它将返回1,1,1,1,因为所有行都包含非字母字符。在你的情况下,这没有任何意义
你能描述一下你想做什么吗?正如@ san1646所说,为什么不使用ORDER
?您是说要通过字母R将RG41 5LY
和RG7 6LO
组合在一起吗?在这种情况下,您可以使用LEFT(postcode,1)
来获取第一个字母。