当前位置: 首页 > 科技观察

8个实用的SQL操作技巧

时间:2023-03-14 18:25:21 科技观察

在使用SQL的过程中,我们经常会遇到一些奇怪的小问题。今天,我将总结如何处理几个常见问题。1.将小数转换为百分比我们在写SQL的时候,有时候会想把小数转换成百分比来显示。您可以这样写:SELECTCONVERT(VARCHAR(20),CONVERT(DECIMAL(18,2),ROUND(A*100.0/B,2)))+'%'ASRate例如:SELECTCONVERT(VARCHAR(20),CONVERT(DECIMAL(18,2),ROUND(2*100.0/3,2)))+'%'ASRate结果:代码解释:ROUND(Decimalstoberounded,roundeddigits):四舍五入,但不改变号码的长度。CONVERT():第一次CONVERT,四舍五入截取小数位数,小数位数由DECIMAL(18,2)控制CONVERT():第二次convert四舍五入,小数位数被截取转换成字符串类型,在后面加一个百分号,会显示完成百分比。注意两点:被除数不为0,除数先转为浮点型(这里我们用100.0将2转为浮点型)。2、修改表结构后无法保存我们经常会遇到这样的问题。当我们修改表结构的时候,点保存的时候会弹出警告说不允许保存修改。为了解决这个问题,我们需要修改相关配置。点击菜单栏【工具】-【选项】-【设计器】,取消勾选【防止保存需要重新创建表的更改】,点击确定返回修改表结构即可正常修改。如下图所示:3.查询分析器显示行号。这对于调试SQL代码非常有用,因为SQL错误会提示你在哪一行报错。显示行号可以快速锁定位置。显示行号或在上述选项对话框中配置,具体如下:选择【行号】显示代码行数。4、字符串和日期类型转换字符串和日期类型一般可以相互转换,主要是使用CONVERT()函数进行转换。将字符串转换为DATETIME格式,SELECTCONVERT(DATETIME,'2018-06-2609:54:30.027');convertdatetypetostringSELECTCONVERT(VARCHAR(10),'2018-06-2609:54:30.027',120)--最后的120是字符串显示格式的参数如果字符串STR不存在,则返回0;SELECTCHARINDEX('data','SQL数据库开发')--result:4LEFT(STR,LENGTH)从左边截取STR,LENGTH为截取的长度;SELECTLEFT('SQLdatabaseDevelopment',6)--result:SQLdatabaseRIGHT(STR,LENGTH)从右边截取STR,LENGTH为截取的长度;SELECTRIGHT('SQL数据库开发',6)--result:L数据库开发SUBSTRING(STR,N,M)返回字符串STR从第N个字符开始截取M个字符;SELECTSUBSTRING('SQL数据库开发',4,3)--result:databaseREPLACE(STR,STR1,STR2)将字符串STR中的STR1字符替换为STR2字符;SELECTREPLACE('SQL数据库开发','SQL','sql')--结果:sql数据库开发LEN(STR)计算字符串STR的长度;SELECTLEN('SQLdatabasedevelopment')--result:8REVERSE(STR)反转字符串;SELECTREVERSE('SQL数据库开发')--结果:打开数据库数据LQS6,复制表数据INSERTINTOTableName1(field1,field2,field3)SELECTfield4,field5,field6FROMTableName2注意:复制表和复制表的列数据类型需要持续的。7.转换字母大小写ChangeuppercaseletterstolowercaselettersUPDATETableNameSETField=LOWER(Field)ConvertlowercaseletterstouppercaseUPDATETableNameSETField=UPPER(Field)8.删除表/数据DELETEFROMTableName只是删除了表中的部分数据,表结构还在。DELETE可以和WHERE子句一起使用,删除部分数据,例如DELETEFROMStudentWHEREAge>20自动编号不会恢复到初始值。TRUNCATETABLETableNameTRUNCATE语句不能跟where条件,不能根据条件删除,只能删除所有数据。自动编号返回初始值。使用TRUNCATE删除表中的所有数据比DELETE效率高很多,因为TRUNCATE操作使用最小的方式来记录日志。TRUNCATE删除数据,不触发DELETE触发器。DROPTABLETableName删除表本身,即删除表中的所有数据和表结构(列、约束、视图、键)。