补充:使用正则表达式查询.sql 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #补充:使用正则表达式查询
  2. #1、查询以特定字符或字符串开头的记录
  3. #字符“^”匹配以特定字符或者字符串开头的文本。
  4. #例:查询employees表中last_name字段值以字母'b'开头的记录
  5. SELECT *
  6. FROM employees
  7. WHERE last_name REGEXP '^b';
  8. #2、查询以特定字符或字符串结尾的记录
  9. #字符“$”匹配以特定字符或者字符串结尾的文本。
  10. #例:查询employees表中last_name字段值以字母“y”结尾的所有信息。
  11. SELECT *
  12. FROM employees
  13. WHERE last_name REGEXP 'y$';
  14. #3、用符号“.”来替代字符串中的任意一个字符
  15. #字符“.”匹配任意一个字符。
  16. #例:查询employees表中last_name字段值包含字母“a”与“k”且两个字母之间只有一个字母的记录。
  17. SELECT *
  18. FROM employees
  19. WHERE last_name REGEXP 'a.k';
  20. #4、使用“*”和“+”来匹配多个字符
  21. #星号“*”匹配前面的字符任意多次,包括0次。加号“+”匹配前面的字符至少一次。
  22. #例1:查询employees表中last_name字段值以字母“b”开头且“b”后面出现字母“a”的记录
  23. SELECT *
  24. FROM employees
  25. WHERE last_name REGEXP '^ba*';
  26. #例2:查询employees表中last_name字段值以字母“b”开头且“b”后面出现字母“a”至少一次的记录
  27. SELECT *
  28. FROM employees
  29. WHERE last_name REGEXP '^ba+';
  30. #5、匹配指定字符串
  31. #正则表达式可以匹配指定字符串,只要这个字符串在查询文本中即可,
  32. #如要匹配多个字符串,多个字符串直接使用分隔符“|”隔开。
  33. #例1:查询employees表中last_name字段值包含字符串“on”的记录。
  34. SELECT *
  35. FROM employees
  36. WHERE last_name REGEXP 'on';
  37. #例2:查询employees表中last_name字段值包含字符串“on”或者“no”的记录。
  38. SELECT *
  39. FROM employees
  40. WHERE last_name REGEXP 'on|no';#“on|no”之间不能有空格。
  41. #6、匹配指定字符中的任意一个
  42. #例:查询employees表中last_name字段值包含字母“o”或者“t”的记录。
  43. SELECT *
  44. FROM employees
  45. WHERE last_name REGEXP '[ot]';
  46. #7、匹配指定字符以外的字符
  47. #“[^字符集合]”匹配不在指定集合中的任何字符。
  48. #例1:查询employees表中last_name字段值包含字母“a~e”以外的记录。
  49. SELECT *
  50. FROM employees
  51. WHERE last_name REGEXP '[^a-e]';
  52. #例2:查询employees表中last_name字段值包含字母“a~z”以外的记录。
  53. SELECT *
  54. FROM employees
  55. WHERE last_name REGEXP '[^a-z]';
  56. SELECT 'desk'
  57. FROM DUAL
  58. WHERE 'desk' REGEXP '[^abcd]';
  59. #8、使用{n,}或者{n,m}来指定字符串连续出现的次数
  60. #“字符串{n,}”表示至少匹配n次前面的字符串;“字符串{n,m}”表示匹配前面的字符串
  61. #不少于n此,不多于m次。例如,“a{2,}”表示字母a练习出现至少2次,也可以大于
  62. #2次;“a{2,4}”表示字符a连续出现最少2次,最多不能超过4次。
  63. #例1:查询employees表中last_name字段值出现字母“a”至少2次的记录。
  64. SELECT *
  65. FROM employees
  66. WHERE last_name REGEXP 'a{2,}';
  67. #例2:查询employees表中last_name字段值出现字母“a”最少1次、最多3次的记录。
  68. SELECT *
  69. FROM employees
  70. WHERE last_name REGEXP 'a{1,3}';