SQL积累--仅适用于SQL Server

 

1、sql中,字符串保存序号,按照数字顺序进行排序

order by RIGHT(REPLICATE('0',10)+CAST(householdNo AS varchar(10)),10)  asc
 --householdNo 为要排序字段

2、控制小数位数

convert(varchar,convert(decimal(18,2),ROUND(Num1/Num2*100,2)))+'%'  as  XXRate

convert(varchar,convert(decimal(18,2),ROUND(Num1/Num2*100,2)))+'%'    as  XXRate ,

--- ROUND(待四舍五入小数,四舍五入位数):是四舍五入,但是并不会改变数字的长度。

--- convert():第一个convert,将四舍五入完的小数截取小数位数,通过decimal(18,2)实现控制小数位数为2

--- convert():第二个convert,将四舍五入并截取小数位数的数字转化为字符串类型,后加百分号,完成百分比显示

    拓展:int型除法,要得到百分比时注意两点:①被除数不为0  ②除数先转换成浮点型。

值得注意的是:Num1应该保证是浮点数。

 

3、建完表不能修改问题

菜单工具栏“工具”---选项----设计器---组织保存要求重新创建表的更改,去掉选择。

sql server float 小数自动进位 sql控制小数点位数_SQL

sql server float 小数自动进位 sql控制小数点位数_字符串_02

 

4、分析器显示行号

sql server float 小数自动进位 sql控制小数点位数_SQL_03

sql server float 小数自动进位 sql控制小数点位数_字符串_04

勾选行号选项后确定,分析器中边出现了行号。

sql server float 小数自动进位 sql控制小数点位数_字符串_05

 

5、SQL触发器

触发器详细

创建某个表的触发器的SQL语句

USE Test_PMDemo
-----添加时的触发器
GO
create trigger EstimateInsert
on PM_Project  --将要进行更改的表名
for insert           --给表插入一条数据的时候触发
as
declare @PrjID  uniqueidentifier         --定义一个变量
select @PrjID  = ID  from inserted     --把查询出的指定字段的值赋值给变量 
INSERT INTO  PM_Estimate(id,PrjID) VALUES(newid(),@PrjID)  --插入语句

-----删除时的触发器
GO
create trigger EstimateDelete
on PM_Project  --将要进行更改的表名
for delete          --给表插入一条数据的时候触发
as
declare @PrjID  uniqueidentifier          --定义一个变量
select @PrjID  = ID  from deleted      --把查询出的指定字段的值赋值给变量 
delete from PM_Estimate where PrjID=@PrjID     ----删除语句

6、SQL Server 时间字符串转换为DateTime格式

SELECT GETDATE() -------获取当前时间
SELECT CONVERT(DATETIME,'2018-06-26 09:54:30.027'); --------将时间字符串转换为DATETIME格式,

7、SQL字符串截取

  1、CHARINDEX(substr ,str):返回子串 substr 在字符串 str 中第一次出现的位置,如果字符substr在字符串str中不存在,则返回0;

  2、LEFT(str, length):从左边开始截取str,length是截取的长度;

  3、RIGHT(str, length):从右边开始截取str,length是截取的长度;

  4、SUBSTRING(str  ,n ,m):返回字符串str从第n个字符截取到第m个字符;

  5、REPLACE(str, n, m):将字符串str中的n字符替换成m字符;

  6、LEN(str):计算字符串str的长度;

  7、REVERSE(str):把字符串倒置;REVERSE("1234"); ----> 4321

  实例:

SELECT ...,SGCompInfo,
      SUBSTRING(SGCompInfo,0,CHARINDEX(',' ,SGCompInfo)) SGComp,
      SUBSTRING(SGCompInfo,CHARINDEX(',' ,SGCompInfo)+1,LEN(SGCompInfo)) SGer,...
FROM ....

  执行结果:

  

sql server float 小数自动进位 sql控制小数点位数_表名_06

 8、将一个表中数据插入(insert)到另一个表中

insert into hh (fielda,fieldb,fieldc)   select fieldx,fieldy,fieldz from mm

 9、sql字符串替换  replace函数

replace(源字符串,字符串中某个字符或字符串,要修改为哪个字段)

例:(以时间格式转为时间戳为例)

select CONVERT(varchar,GETDATE(),21) timenow1
select   CONVERT(char(17),replace(replace(replace(replace(CONVERT(varchar,GETDATE(),21),'-',''),':',''),' ',''),'.',''))timenow2

       执行结果:

     

sql server float 小数自动进位 sql控制小数点位数_SQL_07

 10、有关索引

  索引的作用

11、SQL 中字母大小写的转换

  ①将大写字母改为小写字母

    update 表名 set 字段名a= Lower(字段a)  

  ②将小写字母转化成大写字母

    update 表名 set 字段名a= upper(字段名a) 

 

 12、表还原(重置)

 

  truncate table 表名

---实例
truncate table WorkFlowArchives

13、日期比较

select*from Log where  datediff(DAY,WriteTime,CONVERT(datetime,'2018-10-17',101))<0

 

14、行转列、列转行


 

 

--- 持续更新中---

 

 

* SQL Server 日期格式化输出

最常用格式

SELECT CONVERT(VARCHAR(100), GETDATE(), 111)   结果:2010/03/06

SELECT CONVERT(VARCHAR(100), GETDATE(), 23)    结果:2010-03-06

 

T-SQL Script

Output format

 

 

SELECT CONVERT(VARCHAR(100), GETDATE(), 0)

03  6 2010  4:19PM

SELECT CONVERT(VARCHAR(100), GETDATE(), 1)

03/06/10

SELECT CONVERT(VARCHAR(100), GETDATE(), 2)

10.03.06

SELECT CONVERT(VARCHAR(100), GETDATE(), 3)

06/03/10

SELECT CONVERT(VARCHAR(100), GETDATE(), 4)

06.03.10

SELECT CONVERT(VARCHAR(100), GETDATE(), 5)

06-03-10

SELECT CONVERT(VARCHAR(100), GETDATE(), 6)

06 03 10

SELECT CONVERT(VARCHAR(100), GETDATE(), 7)

03 06, 10

SELECT CONVERT(VARCHAR(100), GETDATE(), 8)

16:23:28

SELECT CONVERT(VARCHAR(100), GETDATE(), 9)

03  6 2010  4:23:40:110PM

SELECT CONVERT(VARCHAR(100), GETDATE(), 10)

03-06-10

SELECT CONVERT(VARCHAR(100), GETDATE(), 11)

10/03/06

SELECT CONVERT(VARCHAR(100), GETDATE(), 12)

100306

SELECT CONVERT(VARCHAR(100), GETDATE(), 13)

06 03 2010 16:24:39:763

SELECT CONVERT(VARCHAR(100), GETDATE(), 14)

16:24:50:823

SELECT CONVERT(VARCHAR(100), GETDATE(), 20)

2010-03-06 16:25:04

SELECT CONVERT(VARCHAR(100), GETDATE(), 21)

2010-03-06 16:25:18.107

SELECT CONVERT(VARCHAR(100), GETDATE(), 22)

03/06/10  4:25:27 PM

SELECT CONVERT(VARCHAR(100), GETDATE(), 23)

2010-03-06

SELECT CONVERT(VARCHAR(100), GETDATE(), 24)

16:26:48

SELECT CONVERT(VARCHAR(100), GETDATE(), 25)

2010-03-06 16:26:55.810

SELECT CONVERT(VARCHAR(100), GETDATE(), 100)

03  6 2010  4:27PM

SELECT CONVERT(VARCHAR(100), GETDATE(), 101)

03/06/2010

SELECT CONVERT(VARCHAR(100), GETDATE(), 102)

2010.03.06

SELECT CONVERT(VARCHAR(100), GETDATE(), 103)

06/03/2010

SELECT CONVERT(VARCHAR(100), GETDATE(), 104)

06.03.2010

SELECT CONVERT(VARCHAR(100), GETDATE(), 105)

06-03-2010

SELECT CONVERT(VARCHAR(100), GETDATE(), 106)

06 03 2010

SELECT CONVERT(VARCHAR(100), GETDATE(), 107)

03 06, 2010

SELECT CONVERT(VARCHAR(100), GETDATE(), 108)

16:28:25

SELECT CONVERT(VARCHAR(100), GETDATE(), 109)

03  6 2010  4:28:35:123PM

SELECT CONVERT(VARCHAR(100), GETDATE(), 110)

03-06-2010

SELECT CONVERT(VARCHAR(100), GETDATE(), 111)

2010/03/06

SELECT CONVERT(VARCHAR(100), GETDATE(), 112)

20100306

SELECT CONVERT(VARCHAR(100), GETDATE(), 113)

06 03 2010 16:29:25:217

SELECT CONVERT(VARCHAR(100), GETDATE(), 114)

16:29:32:543

SELECT CONVERT(VARCHAR(100), GETDATE(), 120)

2010-03-06 16:29:44

SELECT CONVERT(VARCHAR(100), GETDATE(), 121)

2010-03-06 16:29:51.030

SELECT CONVERT(VARCHAR(100), GETDATE(), 126)

2010-03-06T16:29:59.327

SELECT CONVERT(VARCHAR(100), GETDATE(), 130)

21 ???? ????? 1431  4:30:06:780PM

SELECT CONVERT(VARCHAR(100), GETDATE(), 131)

21/03/1431  4:30:21:990PM

 

 

斩后知