MySQL选择一列直到数字

时间:2015-06-05 15:48:52

标签: php mysql sql

基本上我想从列中选择,直到字段中有数字。 例如,我有类似

的邮政编码数据
+----------+
| 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

它根据第一个空格的列进行分组

谢谢!

3 个答案:

答案 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)

使用Regex in Mysql

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 5LYRG7 6LO组合在一起吗?在这种情况下,您可以使用LEFT(postcode,1)来获取第一个字母。