SQL 笔记

返回字符串中从左/右边开始指定个数的字符
select left(wjshan0808,6) 
select right(wjshan0808,4)
select left([Column_expression],1)
返回字符、二进制、文本或图像表达式的一部分
select substring(wjshan0808,7,4) /*索引从0开始*/
select substring([Column_expression],0,6)
指定测试范围
birthday not between 1970 and  1975-02-06 00:00:00.001 
确定给定的值是否与子查询或列表中的值匹配,使用 NOT IN 可以对返回值取反
where classid not in (4,5,6)
删除指定长度的字符,并在指定的起点处插入另一组字符
select stuff( wjshna0808,5,2,an)/*索引从1开始*/
stuff([Column_Expression],1,2,$)
返回从指定集中删除了重复元组后得到的集
select distinct(Column_Expression) from Table_Name
select distinct Column_Expression  from Table_Name
创建 uniqueidentifier 类型的唯一值
select newid() /*3E1E14FB-2558-41E7-B147-78A2A1FEAADE*/
分页方案
/*每页5条 第二页*/
declare @pageIndex int;
set @pageIndex=2;
select top 5 * from student where studentid not in(select top (5*(@pageIndex-1)) studentid from student)
order by studentid asc
//多一个ID列
declare @pageSize int, @pageIndex int;
set @pageSize=5;
set @pageIndex=4; 
 select * from (select row_number() over(order by studentid asc) as ID ,* from student) as T
where T.ID between @pageSize*(@pageIndex-1)+1 and @pageSize*@pageIndex
//整个student表
declare @pageSize int, @pageIndex int;
set @pageSize=5;
set @pageIndex=1;  
select * from student where studentid 
in( 
    select studentid from 
        (select studentid,row_number() over(order by studentid) as ID from student) as T 
    where T.ID between @pageSize*(@pageIndex-1)+1 and @pageSize*@pageIndex
)
带固定精度和小数位数的数值数据类型。 

decimal[ (p[ , s] )] 和 numeric[ (p[ , s] )] 

固定精度和小数位数。使用最大精度时,有效值从 - 10^38 +110^38 - 1decimal 的 SQL-92 同义词为 dec 和 dec(p, s)。numeric 在功能上等价于 decimal。

p(精度) 
最多可以存储的十进制数字的总位数,包括小数点左边和右边的位数。该精度必须是从 1 到最大精度 38 之间的值。默认精度为 18。

s(小数位数) 
小数点右边可以存储的十进制数字的最大位数。小数位数必须是从 0 到 p 之间的值。仅在指定精度后才可以指定小数位数。默认的小数位数为 0;因此,0 <= s <= p。最大存储大小基于精度而变化。

——————————————————————

将一种数据类型的表达式显式转换为另一种数据类型的表达式。CAST 和 CONVERT 提供相似的功能。
cast(studentno as numeric(18,0))+10  as 学号
SELECT CAST(10.3496847 AS money)
/*语法1*/
CASE input_expression 
    WHEN when_expression 
    THEN result_expression
    [ ...n ]     
    [ ELSE else_result_expression ] 
END  
/*语法2*/
CASE
    WHEN Boolean_expression 
    THEN result_expression         
    [ ...n ]     
    [ ELSE else_result_expression ] 
END
 
select studentno,c#编程,
(
    case when c#编程 is null then 无成绩 
         when c#编程>60 and c#编程<80 then 合格 
         when c#编程>=80 and c#编程<90 then 优良  
         when c#编程>=90  then 优秀  
         else  不及格 
    end 
) as c#编程成绩  from score
确定特定字符串是否与指定模式相匹配。模式可以包含常规字符和通配符。模式匹配过程中,常规字符必须与字符串中指定的字符完全匹配。但是,通配符可以与字符串的任意部分相匹配。与使用 = 和 != 字符串比较运算符相比,使用通配符可使 LIKE 运算符更加灵活。如果任何一个参数都不属于字符串数据类型,则 SQL Server 2005 Database Engine 会将其转换为字符串数据类型(如果可能)。

使用 ESCAPE 子句的模式匹配
可搜索包含一个或多个特殊通配符的字符串。例如,customers 数据库中的 discounts 表可能存储含百分号 (%) 的折扣值。若要搜索作为字符而不是通配符的百分号,必须提供 ESCAPE 关键字和转义符。例如,一个样本数据库包含名为 comment 的列,该列含文本 30%。若要搜索在 comment 列中的任何位置包含字符串 30% 的任何行,请指定 WHERE comment LIKE %30!%% ESCAPE ! 之类的 WHERE 子句。如果未指定 ESCAPE 和转义符,则数据库引擎 将返回包含字符串 30 的所有行。

如果 LIKE 模式中的转义符后面没有字符,则该模式无效并且 LIKE 返回 FALSE。如果转义符后面的字符不是通配符,则将放弃转义符并将该转义符后面的字符作为该模式中的常规字符处理。这包括百分号 (%)、下划线 (_) 和左括号 ([) 通配符(如果它们包含在双括号 ([ ]) 中)。另外,在双括号字符 ([]) 内,可以使用转义符并将插入符号 (^)、连字符 () 和右括号 (]) 转义


通配符  说明  示例  
%
 包含零个或多个字符的任意字符串。
 WHERE title LIKE %computer% 将查找在书名中任意位置包含单词 "computer" 的所有书名。
 
_(下划线)
 任何单个字符。
 WHERE au_fname LIKE _ean 将查找以 ean 结尾的所有 4 个字母的名字(Dean、Sean 等)。
 
[ ]
 指定范围 ([a-f]) 或集合 ([abcdef]) 中的任何单个字符。
 WHERE au_lname LIKE [C-P]arsen 将查找以 arsen 结尾并且以介于 C 与 P 之间的任何单个字符开始的作者姓氏,例如 Carsen、Larsen、Karsen 等。
 
[^]
 不属于指定范围 ([a-f]) 或集合 ([abcdef]) 的任何单个字符。
 WHERE au_lname LIKE de[^l]% 将查找以 de 开始并且其后的字母不为 l 的所有作者的姓氏。
 
where loginid like [a-d]%

在 mytbl2 表的列 c1 中查找精确字符串 10-15%
LIKE %10-15!% off% ESCAPE !;

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。