SQL SERVER 学习笔记
--- 转小写 输出:abcdef SELECT Lower('aBCDEF'); --- 转大写 输出:ABCDEF SELECT UPPER('ABcdef'); -- 去左空格 ->'ABCDEF ' SELECT LTRIM(' ABCDEF '); -- 去右空格 ->' ABCDEF' SELECT RTRIM(' ABCDEF '); -- 从左截取字符串 ->abcde SELECT LEFT('abcdefg123456',5); -- 从左截取字符串 ->23456 SELECT RIGHT('abcdefg123456',5); --- 查询传入字符起始位置 为0 SELECT CHARINDEX('a','ab') --- 截取字符串 如: 从第三个字符开始截取两个长度,输出:cd SELECT SUBSTRING('abcdefghi',3,2) --- 替换字符串 输出:A4CDEFG4AC SELECT REPLACE('ABCDEFGBAC','B',4); --- 以指定的次数重复字符串值 输出:ABAB SELECT REPLICATE('AB', 2) --- 返回字符串值的逆序 输出 :FEDCBA SELECT REVERSE ('ABCDEF') --- 数据类型转换 输出:13 SELECT CAST('3' as int)+10 ---- 时间:---- -- 获取现在时间 输出:2013-03-19 16:17:27.437 select GETDATE(); --- 获取日期 select day(GETDATE()); --- 获取年 select year(GETDATE()); --- 获取月份 select MONTH(GETDATE()); --- 添加时间 YEAR,DAY,HOUR,MONTH -- 添加时间:输出 2023-03-19 16:20:06.763 select dateadd(YEAR,10,GETDATE()); --- DATENAME (<datepart>, <date>) -- 以字符串的形式返回日期的指定部分此部分。由datepart 来指定。 SELECT DATENAME(year,GETDATE()); ---DATEPART (<datepart>, <date>) ---以整数值的形式返回日期的指定部分。此部分由datepart 来指定。 SELECT DATEPART(yy, GETDATE()); -- 相当于 year(getdate()) SELECT DATEPART(mm, GETDATE()); -- 相当于 month(getdate()) SELECT DATEPART(dd, GETDATE()); -- 相当于 day(getdate()) SELECT DATEPART(hh, GETDATE()); ---- 时间格式化函数 Select CONVERT(varchar(100), GETDATE(), 20); --2013-03-19 16:34:50 Select CONVERT(varchar(100), GETDATE(), 23); --2013-03-19 Select CONVERT(varchar(100), GETDATE(), 8); --16:35:54 --- DateDIFF 比较时间 输出:6 SELECT DATEDIFF(hh, '2013-03-19 12:34:50', '2013-03-19 18:34:50') --- 常用 统计函数 /* AVG ( ) -返回的平均价值 count( ) -返回的行数 first( ) -返回第一个值 last( ) -返回最后一个值 max( ) -返回的最大价值 min( ) -返回最小的价值 total( ) -返回的总和 */ --- row_number select row_number() over(order by field1) as row_number,* from t_table
行转列:
SELECT [DAY] ,sum( CASE result WHEN '胜' then 1 else 0 end) as 胜,sum( CASE result WHEN '负' then 1 else 0 end ) as 负 from test GROUP BY [day]
游标:
事务
BEGIN TRAN update Blog set name=name+'Rhythmk' where Id='04C65E2C-E604-4295-9F20-0004B72DE0B4' select CAST('107a' as INT) if @@error<>0 BEGIN SELECT 'A' ROLLBACK TRAN END ELSE BEGIN SELECT 'B' COMMIT TRAN END
第二种写法
BEGIN TRAN UPDATE BlogCate SET name = name + 'Rhythmk' WHERE Id = '04C65E2C-E604-4295-9F20-0004B72DE0B4' SELECT CAST ('107' AS INT) BEGIN try SELECT 'B' COMMIT TRAN END try BEGIN catch SELECT'A' ROLLBACK TRAN END catch
不使用游标 循环执行此处过程:
可以先生成临时表,然后循环取数据
---- 不使用游标,循环执行存储过程 DECLARE @ItemCount INT,@GUID UNIQUEIDENTIFIER SET @ItemCount=0 SELECT @ItemCount=COUNT(*) FROM dbo.data_dict SELECT TOP 1 @GUID=GUID FROM dbo.data_dict WHILE @ItemCount>0 BEGIN DELETE FROM data_dict WHERE GUID= @GUID -- 执行存储过程 EXEC PROC_INSERT_A 1 SELECT TOP 1 @GUID=GUID FROM dbo.data_dict SELECT @ItemCount=COUNT(*) FROM dbo.data_dict END
一只站在树上的鸟儿,从来不会害怕树枝会断裂,因为它相信的不是树枝,而是它自己的翅膀。与其每天担心未来,不如努力做好现在。