tets.py 1.1 KB

1234567891011121314151617181920212223242526272829303132333435
  1. import re
  2. def replace_select_content(sql):
  3. """
  4. 将SELECT和FROM之间的内容替换为SELECT COUNT(原内容) FROM
  5. """
  6. pattern = r'SELECT\s+(.*?)\s+FROM'
  7. def replace_func(match):
  8. content = match.group(1) # 获取SELECT和FROM之间的内容
  9. # 如果是DISTINCT或ALL等特殊关键字,需要特殊处理
  10. if re.match(r'^(DISTINCT|ALL)\s+', content, re.IGNORECASE):
  11. # 保留DISTINCT/ALL关键字
  12. return f'SELECT COUNT({content}) FROM'
  13. else:
  14. return f'SELECT COUNT({content}) FROM'
  15. # 使用re.sub进行替换,re.IGNORECASE忽略大小写
  16. result = re.sub(pattern, replace_func, sql, flags=re.IGNORECASE)
  17. return result
  18. # 测试用例
  19. test_sqls = [
  20. "SELECT name FROM users",
  21. "SELECT name, age, high FROM users WHERE age > 20",
  22. "SELECT DISTINCT name FROM users",
  23. "SELECT * FROM employees",
  24. "select id, name from students where grade = 'A'",
  25. "SELECT name FROM (SELECT * FROM users) as t",
  26. ]
  27. for sql in test_sqls:
  28. result = replace_select_content(sql)
  29. print(f"原始SQL: {sql}")
  30. print(f"替换后: {result}\n")