欢迎投稿

今日深度:

SQL语句相关概念及练习之基础篇(1)(4)

  1. ------------------------------ 
  2. -----SQL其他内置函数------ 
  3. ------------------------------ 
  4.  
  5. --1.数学函数 
  6. --ABS():求绝对值 
  7. --CEILING():舍入到最大整数 
  8. --FLOOR():舍入到最小整数 
  9. --ROUND():四舍五入 
  10.  
  11. selectABS(-3) 
  12. selectCEILING(3.33) 
  13. selectCEILING(-3.61) 
  14. selectFLOOR(2.98) 
  15. selectFLOOR(-3.61) 
  16. selectROUND(-3.61,1)--第二个参数是精度,小数点后的位数 
  17. selectROUND(-3.61,0) 
  18. selectROUND(3.1415926,3) 
  19.  
  20. --2.字符串函数 
  21. --LEN():计算字符串长度 
  22. --LOWER(),UPPER():转大小写 
  23. --LTRIM():去掉字符串左侧的空格 
  24. --RTRIM():去掉字符串右侧的空格 
  25. --SUBSTRING(string,start_positoin,length): 
  26. --索引从1开始 
  27. selectSUBSTRING('abc111',2,3)--结果是bc1 
  28. selectFName,SUBSTRING(FName,2,2)fromT_Employee 
  29. selectLEN('abc')--结果是3 
  30. selectFName,LEN(FName)fromT_Employee 
  31.  
  32. --没有可以同时既去掉左边空格、又去掉右边空格的TRIM()内置函数,所以先左后右的进行TRim,当然,你也可以先右后左 
  33. selectLTRIM('abc'),RTRIM('abc'),LEN(LTRIM(RTRIM('abc'))) 
  34.  
  35. --3.日期函数 
  36. --GETDATE():获取当前日期时间 
  37. --DATEADD(datepart,numbre,date):计算增加以后的日期, 
  38. --参数date为待计算的日期;参数number为增量;参数datepart为计量单位,时间间隔单位; 
  39. --DATEDIFF(datepart,startdate,enddate):计算2个日期之间的差额 
  40. --DATEPART(datepart,date):返回一个日期的特定部分,比如年月日,时分秒等. 
  41.  
  42. /* 
  43.  
  44. 值缩写SqlServer)(Access和ASP)说明 
  45. YearYyyyyy年1753~9999 
  46. QuarterQqq季1~4 
  47. MonthMmm月1~12 
  48. DayofyearDyy一年的日数,一年中的第几日1-366 
  49. DayDdd日,1-31 
  50. WeekdayDww一周的日数,一周中的第几日1-7 
  51. WeekWkww周,一年中的第几周0~51 
  52. HourHhh时0~23 
  53. MinuteMin分钟0~59 
  54. SecondSss秒0~59 
  55. MillisecondMs-毫秒0~999 
  56. */ 
  57.  
  58. selectDATEADD(DAY,3,getdate()) 
  59. selectDATEADD(MONTH,-3,getdate()) 
  60. selectDATEADD(HOUR,8,getdate()) 
  61. selectDATEDIFF(YEAR,'1989-05-01',GETDATE()) 
  62. selectDATEDIFF(HH,GETDATE(),DATEADD(DAY,-3,GETDATE())) 
  63.  
  64. --查询员工的工龄,年为单位 
  65. selectFName,FInDate,DATEDIFF(year,FInDate,getdate())as工龄fromT_Employee 
  66.  
  67. --取出每一年入职员工的个数V1 
  68. selectDATEDIFF(year,FInDate,getdate()),COUNT(*) 
  69. fromT_Employee 
  70. groupbyDATEDIFF(year,FInDate,getdate()) 
  71.  
  72. --取出每一年入职员工的个数V2 
  73. selectDATEPART(YEAR,FInDate),COUNT(*) 
  74. fromT_Employee 
  75. groupbyDATEPART(YEAR,FInDate) 
  76. selectDATEPART(YEAR,GETDATE()) 
  77. selectDATEPART(MONTH,GETDATE()) 
  78. selectDATEPART(DAY,GETDATE()) 
  79. selectDATEPART(HH,GETDATE()) 
  80. selectDATEPART(MINUTE,GETDATE()) 
  81. selectDATEPART(SECOND,GETDATE()) 
  82.  
  83. --4.类型转换函数 
  84. --CAST(expressionasdata_type) 
  85. --CONVERT(data_type,expression) 
  86. selectCAST('123'asint),CAST('2010-09-08'asdatetime), 
  87. CONVERT(datetime,'2010-09-08'),CONVERT(varchar(20),123) 
  88.  
  89. --5.空值处理函数isNull 
  90. --ISNULL(expression,value) 
  91. selectISNULL(FName,'佚名')as姓名fromT_Employee 
  92.  
  93. --6.CASE函数用法: 
  94. --1.单值判断:相当于switch.case 
  95. --CASEexpression 
  96. --WHENvalue1thenreturnvalue1 
  97. --WHENvalue2thenreturnvalue2 
  98. --WHENvalue3thenreturnvalue3 
  99. --ELSEdefault_return_value 
  100. --END 
  101.  
  102. --判断客户类型 
  103. selectFName, 
  104. caseFLevel 
  105. when1then'普通客户' 
  106. when2then'会员' 
  107. when3then'VIP' 
  108. else'未知客户类型' 
  109. End 
  110. )as客户类型 
  111. fromT_Customer 
  112.  
  113. --收入水平查询 
  114. selectFName, 
  115. case 
  116. whenFSalary<2000then'低收入' 
  117. whenFSalary>=2000andFSalary<=5000then'中等收入' 
  118. else'高收入' 
  119. end 
  120. )as收入水平 
  121. fromT_Employee 
  122.  
  123. --这里有一道关于CASE用法的面试题 
  124. --表T中有ABC三列,用SQL语句实现:当A列大于B列时选择A列,否则选择B列; 
  125. --当B列大于C列时选择B列,否则选择C列。 
  126. select 
  127. case 
  128. whena>bthenaelseb 
  129. end 
  130. ), 
  131. case 
  132. whenb>cthenbelsec 
  133. end 
  134. fromT 
  135.  
  136. --------------------------------------- 
  137.  
  138. selectFNumber, 
  139. case 
  140. whenFAmount>0thenFAmount 
  141. else0 
  142. end 
  143. )as收入, 
  144. case 
  145. whenFAmount<0thenABS(FAmount) 
  146. else0 
  147. end 
  148. )as支出 
  149. fromT 
  150. ----------------------------------------- 
  151.  
  152. --球队比赛那个题 
  153. --有一张表T_Scroes,记录比赛成绩: 
  154. --DateNameScroe 
  155. --2008-8-8拜仁胜 
  156. --2008-8-9奇才胜 
  157. --2008-8-8湖人胜 
  158. --2008-8-10拜仁负 
  159. --2008-8-8拜仁负 
  160. --2008-8-12奇才胜 
  161. --要求输出下面格式: 
  162. --Name胜负 
  163. --拜仁12 
  164. --湖人10 
  165. --奇才20 
  166. --注意:在中文字符串前加N,比如N'胜' 
  167. createtableT_Scores( 
  168. [Date]datetimenullcollate 
  169. [Name]nvarchar(50) 
  170. CREATETABLE[T_Scores]([Date][datetime]NULL
  171. [Name][nvarchar](50)COLLATEChinese_PRC_CI_ASNULL, 
  172. [Score][nvarchar](50)COLLATEChinese_PRC_CI_ASNULL 
  173. ); 
  174. INSERT[T_Scores]([Date],[Name],[Score])VALUES(CAST(0x00009AF200000000ASDateTime),N'拜仁',N'胜'); 
  175. INSERT[T_Scores]([Date],[Name],[Score])VALUES(CAST(0x00009AF300000000ASDateTime),N'奇才',N'胜'); 
  176. INSERT[T_Scores]([Date],[Name],[Score])VALUES(CAST(0x00009AF300000000ASDateTime),N'湖人',N'胜'); 
  177. INSERT[T_Scores]([Date],[Name],[Score])VALUES(CAST(0x00009AF400000000ASDateTime),N'拜仁',N'负'); 
  178. INSERT[T_Scores]([Date],[Name],[Score])VALUES(CAST(0x00009AF200000000ASDateTime),N'拜仁',N'负'); 
  179. INSERT[T_Scores]([Date],[Name],[Score])VALUES(CAST(0x00009AF600000000ASDateTime),N'奇才',N'胜'); 
  180. select*fromT_Scores 
  181.  
  182. --列出第一个表格 
  183. --统计每支队伍的胜负情况 
  184. selectName, 
  185. caseScore 
  186. whenN'胜'then1 
  187. else0 
  188. end 
  189. )as胜, 
  190. caseScore 
  191. whenN'负'then1 
  192. else0 
  193. end 
  194. )as负 
  195. fromT_Scores 
  196. selectName, 
  197. sum 
  198. caseScore 
  199. whenN'胜'then1 
  200. else0 
  201. end 
  202. )as胜, 
  203. sum 
  204. caseScore 
  205. whenN'负'then1 
  206. else0 
  207. end 
  208. )as负 
  209. fromT_Scores 
  210. groupbyName 
  211. --根据每个队的胜负判断出胜负的场数 


www.htsjk.Com true http://www.htsjk.com/shujukujc/18792.html NewsArticle ------------------------------ -----SQL其他内置函数------ ------------------------------ --1.数学函数 --ABS():求绝对值 --CEILING():舍入到最大整数 --FLOOR():舍入到最小整数 -...
评论暂时关闭