SQLServer之常用函数总结详解
<h2><strong>SQLServer中的常用函数</strong></h2><h3>字符串函数</h3>
<p><strong>len() 计算字符串的长度</strong></p>
<div class="jb51code">
<pre class="brush:sql;">
select LEN(name) from test1--计算name的长度</pre>
</div>
<p><strong>大小写转换 lower() upper()</strong></p>
<div class="jb51code">
<pre class="brush:sql;">
select lower('STUDENT !')
select upper('student !')
</pre>
</div>
<p><strong>去空 ltrim() 字符串左侧的空格去掉 ,rtrim()字符串右侧的空格去掉</strong></p>
<div class="jb51code">
<pre class="brush:sql;">
declare @str varchar(100) = ' a a a '
select ltrim(@str)
select rtrim(@str)
</pre>
</div>
<p><strong>字符串截取 substring() left() right()</strong></p>
<div class="jb51code">
<pre class="brush:sql;">
select substring('HelloWorld!',6,6)--可截取任意长度
select left('HelloWorld!' ,5)--从左开始截取
select right('HelloWorld!' ,6) --从右开始截取
</pre>
</div>
<p><strong>字符串替换 replace()</strong></p>
<div class="jb51code">
<pre class="brush:sql;">
select replace('HelloWorld!','o','e') --string,要被替换的字符串,替换的字符串
</pre>
</div>
<p><strong>字符串 掉个顺序 reverse()</strong></p>
<div class="jb51code">
<pre class="brush:sql;">
select reverse('abc') --cba
</pre>
</div>
<p><strong>返回 字符串1在字符串2中出现的未位置 charindex()</strong></p>
<div class="jb51code">
<pre class="brush:sql;">
charindex(srt1 ,srt2)--srt1 在srt2中的开始位置
select charindex('H','elloHWorld') 结果为:5 --只能查第一次出现的位置,匹配不到返回0</pre>
</div>
<p><strong>指定的次数重复字符串值 replicate()</strong></p>
<div class="jb51code">
<pre class="brush:sql;">
select replicate('abc',4) 结果为:abcabcabcabc</pre>
</div>
<h2>聚合函数</h2>
<p>聚合函数对一组值计算后返回单个值。除了count(统计项数)函数以外,其他的聚合函数在计算式都会忽略空值(null)。所有的聚合函数均为确定性函数。</p>
<p><strong>平均值 avg() 算一组数的总和,然后除以为null的个数,得到平均值。</strong></p>
<div class="jb51code">
<pre class="brush:sql;">
select avg(id) from test1 avg(列名)</pre>
</div>
<p><strong>最小值min() 最大值max()</strong></p>
<div class="jb51code">
<pre class="brush:sql;">
select min(id) from test1
select max(id) from test1
</pre>
</div>
<p><strong>求和 sum()</strong></p>
<div class="jb51code">
<pre class="brush:sql;">
select sum(id) from test1
</pre>
</div>
<p><strong>计算总数 count()</strong></p>
<div class="jb51code">
<pre class="brush:sql;">
select count(id) from test1
</pre>
</div>
<p><strong>分组</strong></p>
<div class="jb51code">
<pre class="brush:sql;">
统计学生的总成绩并排序
select stu_id as 学生编号 ,name as 学生姓名 , SUM(语文+英语+数学+代数) as 总分from tb_stuAchievement
ORDER BY 总分 DESC
GROUP BY stu_id ,name
</pre>
</div>
<p>(函数可能不全,我只记录了我用到的,完整的函数可以查查手册)</p>
<h2>日期和时间函数</h2>
<p><strong>获取当前日期GetDate</strong></p>
<div class="jb51code">
<pre class="brush:sql;">
select getdate()
</pre>
</div>
<p><strong>GetUTCDate 获取UTC时间值</strong></p>
<div class="jb51code">
<pre class="brush:sql;">
select GETUTCDATE()
</pre>
</div>
<p><strong>单独获取年月日</strong></p>
<div class="jb51code">
<pre class="brush:sql;">
select year(getdate())
select month(getdate())
select day(getdate())
</pre>
</div>
<p><strong>日期减法 DATEDIFF</strong></p>
<div class="jb51code">
<pre class="brush:sql;">
select datediff(YYYY,'2011-11-11','2012-12-12') --输出1 年份相减之后的确是1
select datediff(day,'2011-11-11','2012-12-12') --输出 397 两个日期相差的天数
</pre>
</div>
<p><strong>SQLServer 2008中新增的日期时间型函数</strong></p>
<div class="jb51code">
<pre class="brush:plain;">
1、获取系统时间 SysDateTime()
2、获取当前日期和时间 SysDateTimeOffset
3、获取系统UTC时间 SysUTCDateTime
4、Current_TimeStamp当前数据库系统时间戳
5、判断是否为日期数据isDate
select isdate('2012-12-12') -- 输出1
select isdate('xxxx-12-12') -- 输出0
</pre>
</div>
<p>(函数可能不全,我只记录了部分,完整的函数可以查查手册)</p>
<p><strong>MID() 从文本字段中提取字符。</strong></p>
<div class="jb51code">
<pre class="brush:sql;">
SELECT MID(City,1,3) as SmallCity FROM Persons
</pre>
</div>
<p><strong><span style="background-color: initial; font-family: Arial, Verdana, sans-serif;">ROUND() 函数 数值字段舍入为指定的小数位数。</span></strong></p>
<div class="jb51code">
<pre class="brush:sql;">
SELECT ROUND(column_name,decimals) FROM table_name
</pre>
</div>
<p><strong>NOW() 函数 返回当前的日期和时间。</strong></p>
<div class="jb51code">
<pre class="brush:sql;">
SELECT NOW() FROM table_name
</pre>
</div>
<p><strong>FORMAT () 用于对字段的显示进行格式化。</strong></p>
<div class="jb51code">
<pre class="brush:sql;">
select FORMAT(stu_intime,'yyyy-MM-dd hh:mm:ss') as intime from stu
</pre>
</div>
<p><strong>SELECT INTO 从一个表中选取数据,然后把数据插入另一个表中。</strong></p>
<div class="jb51code">
<pre class="brush:sql;">
select stu_name,stu_id into stu1 from stu --将stu表中的stu_id和stu_name插入新表stu1(会创建一个新表)
</pre>
</div>
<h2>sql server 中没有limit 但是有top</h2>
<div class="jb51code">
<pre class="brush:sql;">
/*查询 从n开始的m条数据 */
declare @n int=2;
declare @m int = 5;
select top (@m) * from stu
where id not in (select top (@n) id from stu)
/*查询n到m之间的数据*/
declare @n int=2;
declare @m int = 5;
select top (@m-@n+1) * from stu
where id not in (select top (@n-1) id from stu)
</pre>
</div>
<h2>BETWEEN … AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。</h2>
<div class="jb51code">
<pre class="brush:sql;">
/* 查询id 1 到3 的数据 */
select * from stu where id between '1' and '3' </pre>
</div>
<h2>ALTER TABLE 语句用于在已有的表中添加、修改或删除列。</h2>
<div class="jb51code">
<pre class="brush:sql;">
alter table stu add stu_sj varchar(200) --添加一列名为stu_sj
alter table stu drop column stu_sj--删除列
</pre>
</div>
<h2>DISTINCT 用于返回唯一不同的值。</h2>
<div class="jb51code">
<pre class="brush:sql;">
/* 返回名字,重复的不返回 */
select distinct stu_name from stu
</pre>
</div>
頁:
[1]