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 ) asfrom  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

 

posted @ 2013-03-19 16:56  Rhythmk  阅读(282)  评论(2编辑  收藏  举报
Rhythmk 个人笔记