sql语气查询去重的两种方法、sql的模糊查询、sql中的日期函数、mysql字符串 ...

打印 上一主题 下一主题

主题 637|帖子 637|积分 1911

sql语气查询去重的两种方法

以下两种都可以进行去重查询,区别是: 用distinct去重,只能查询到去重的属性那一列,无法查询其他字段 用group by分组查询,可以根据需求查询对应的其他字段,推荐用group by
  1. 第一种:使用distinct(关键词distinct用于返回唯一不同的值)
  2. select distinct university from user_profile;
  3. 第二种:使用group by按照university进行分组
  4. select university from user_profile group by university;
复制代码
sql的模糊查询
  1. 这道题主要考察的是模糊查询 字段名 like '匹配内容'
  2. _ :下划线 代表匹配任意一个字符;
  3. % :百分号 代表匹配0个或多个字符;
  4. []: 中括号 代表匹配[ ]中的任意一个字符(若要比较的字符是连续的,则可以用连字符“-”表 达 );
  5. [^]: ^尖冒号 代表 非,取反的意思;不匹配[ ]中的任意一个字符。。
  6. tips:面试常问的一个问题:你了解哪些数据库优化技术? SQL语句优化也属于数据库优化一部分,而我们的like模糊查询会引起全表扫描,速度比较慢,应该尽量避免使用like关键字进行模糊查询。
复制代码
sql中的日期函数
  1. 知识
  2. 日期函数
  3. DAYOFWEEK(date)
  4. 返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。这些索引值对应于ODBC标准。
  5. 1
  6. select DAYOFWEEK('1998-02-03')
  7. -> 3
  8. WEEKDAY(date)
  9. 返回date的星期索引(0=星期一,1=星期二, ……6= 星期天)。
  10. 1
  11. mysql> select WEEKDAY('1997-10-04 22:23:00');
  12. -> 5
  13. DAYOFMONTH(date)
  14. 返回date的月份中日期,在1到31范围内。
  15. 1
  16. mysql> select DAYOFMONTH('1998-02-03');
  17. -> 3
  18. DAYOFYEAR(date)
  19. 返回date在一年中的日数, 在1到366范围内。
  20. 1
  21. mysql> select DAYOFYEAR('1998-02-03');
  22. -> 34
  23. MONTH(date)
  24. 返回date的月份,范围1到12。
  25. 1
  26. mysql> select MONTH('1998-02-03');
  27. -> 2
  28. DAYNAME(date)
  29. 返回date的星期名字。
  30. 1
  31. mysql> select DAYNAME("1998-02-05");
  32. -> 'Thursday'
  33. MONTHNAME(date)
  34. 返回date的月份名字。
  35. 1
  36. mysql> select MONTHNAME("1998-02-05");
  37. -> 'February'
  38. QUARTER(date)
  39. 返回date一年中的季度,范围1到4。
  40. 1
  41. mysql> select QUARTER('98-04-01');
  42. -> 2
  43. WEEK(date)
  44. 对于星期天是一周的第一天的地方,有一个单个参数,返回date的周数,范围在0到52。
  45. 1
  46. mysql> select WEEK('1998-02-20');
  47. -> 7
  48. WEEK(date,first)
  49. 2个参数形式WEEK()允许你指定星期是否开始于星期天或星期一。
  50. 如果第二个参数是0,星期从星期天开始,
  51. 如果第二个参数是1,从星期一开始。
  52. 1
  53. mysql> select WEEK('1998-02-20',0);
  54. -> 7
  55. 1
  56. mysql> select WEEK('1998-02-20',1);
  57. -> 8
  58. YEAR(date)
  59. 返回date的年份,范围在1000到9999。
  60. 1
  61. mysql> select YEAR('98-02-03');
  62. -> 1998
  63. HOUR(time)
  64. 返回time的小时,范围是0到23。
  65. 1
  66. mysql> select HOUR('10:05:03');
  67. -> 10
  68. MINUTE(time)
  69. 返回time的分钟,范围是0到59。
  70. 1
  71. mysql> select MINUTE('98-02-03 10:05:03');
  72. -> 5
  73. SECOND(time)
  74. 回来time的秒数,范围是0到59。
  75. 1
  76. mysql> select SECOND('10:05:03');
  77. -> 3
  78. PERIOD_ADD(P,N)
  79. 增加N个月到阶段P(以格式YYMM或YYYYMM)。以格式YYYYMM返回值。注意阶段参数P不是日期值。
  80. 1
  81. mysql> select PERIOD_ADD(9801,2);
  82. -> 199803
  83. PERIOD_DIFF(P1,P2)
  84. 返回在时期P1和P2之间月数,P1和P2应该以格式YYMM或YYYYMM。注意,时期参数P1和P2不是日期值。
  85. 1
  86. mysql> select PERIOD_DIFF(9802,199703);
  87. -> 11
复制代码
mysql字符串截取之substring_index

substring_index()函数用来截取字符串
  1.     substring_index(str,delim,count)
  2.     str:要处理的字符串
  3.     delim:分隔符
  4.     count:计数
复制代码
示例:
如 str=www.wiki.com
则 substring_index(str,'.',1) 处理的结果是:www
substring_index(str,'.',2) 得到的结果是:www.wiki
也就是说,如果count是正数,那么就是从左往右数,第N个分隔符的左边的全部内容,
相反,如果是负数,那么就是从右边开始数,第N个分隔符右边的所有内容。
如:
substring_index(str,'.',-2) 得到的结果为:http://wikibt.com
如果要中间的的 wiki 怎么办?
很简单的,需要从两个方向截取:
先截取从右数第二个分隔符的右边的全部内容,再截取从左数的第一个分隔符的左边的全部内容:
  substring_index(substring_index(str,'.',-2),'.',1);
sql中字符串的切割、截取、删除、替换、计算字符串的长度函数
  1. select
  2. -- 替换法 replace(string, '被替换部分','替换后的结果')
  3. -- device_id, replace(blog_url,'http:/url/','') as user_name
  4. -- 截取法 substr(string, start_point, length*可选参数*)
  5. -- device_id, substr(blog_url,11,length(blog_url)-10) as user_nam
  6. -- 删除法 trim('被删除字段' from 列名)
  7. -- device_id, trim('http:/url/' from blog_url) as user_name
  8. -- 字段切割法 substring_index(string, '切割标志', 位置数(负号:从后面开始))
  9. device_id, substring_index(blog_url,'/',-1) as user_name
  10. from user_submit;
  11. 字符串的截取:substring(字符串,起始位置,截取字符数)
  12. 字符串的拼接:concat(字符串1,字符串2,字符串3,...)
  13. 字母大写:upper(字符串)
复制代码
计算字符串长度函数
  1. char_length(字符串列名)
复制代码
sql的高级语法:窗口函数

见链接:https://zhuanlan.zhihu.com/p/92654574
补充窗口函数:

lead的写法:(偏移标的,偏移量,null)
ifnull(A,B):A非空返回A,A是空值返回B
返回 2020 年 1 月的所有订单的订单号和订单日期的解法

字符串匹配(近似查找法)
用like来查找
  1. select order_num, order_date
  2. from Orders
  3. where order_date like '2020-01%'
  4. order by order_date
复制代码
切割字符串
  1. select order_num, order_date
  2. from Orders
  3. where left(order_date, 7) = '2020-01'
  4. order by order_date
复制代码
字符串比较
[code]select *from Orderswhere order_date >= '2020-01-01 00:00:00' and order_date

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

我可以不吃啊

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表