http://www.cnblogs.com/zhangs1986/p/4917800.html

实用函数方法

由于有些知识很少被用到,但真需要用时却忘记了又焦头烂额的到处找。

现在将这些‘冷门“却有效的小知识贡献出来,以备不时之需。

存储过程中的 '''' 相当于数据库中的‘ 单引号
DECLARE @str VARCHAR(100)
SET @str='''aaa'''
SELECT REPLACE(@str,'''','"')
:"aaa"
rtrim :使用 LTRIM 删除字符变量中的前导空格 ; RTRIM 删除字符变量中的尾随空格
rtrim(ltrim(splitdata))
-- 用select into 把数据放到临时表中,按交费期限排序,并加上id
select identity(int,1,1) as id,FeeGUID,PayLimit,BgnDate,EndDate,Amount,TestIsRight
into #tmpfee --select into不需要提前声明临时表#tmpfee
from z_fee
where RentGUID = @strRentGUID
order by PayLimit drop table #tmpfee
用insert into select 创建临时表 插入自增列
Create Table #Temp_ProjectCodeList
(
RowId int identity(1,1)
,ProjectCode varchar(100)
) Insert Into #Temp_ProjectCodeList(ProjectCode)
Select ProjCode From p_Project Where Level = 2 Set @MaxCount = @@RowCount
Set @Count = 1 While @Count <= @MaxCount
Begin
Select @ProjectCode = ProjectCode From #Temp_ProjectCodeList Where RowId = @Count Exec usp_cb_BuildHsCost @ProjectCode, @IsExistHsCost, @IsUpdateCsCost --调整计数器
Set @Count = @Count + 1
End
Return 执行不成功,中断执行
If Exists(select 8 from cb_HsCost where ProjectCode = @ProjectCode and IsJianAn = 1)
If @ProjectGUID Is Null
Begin
Print '[' + @ProjectCode + ']:当前指定的项目在当前系统中不存在!'
Return -1
End
得到包含前月在内的一年时间
SET @dtBeginDate = getdate()
SET @dtEndDate = dateadd(month,-1,dateadd(year,1,@dtBeginDate))

高能预警

DATEPART ( datepart , date ) datepart函数中一周是周日到周六,而我们通常认为一周是周一到周日
返回表示指定日期的指定日期部分的整数
本周第一天 (星期1)
select dateadd(wk, datediff(wk,0,getdate()), 0)
本周最后一天(星期天)
select dateadd(wk, datediff(wk,0,getdate()), 6)
得到上周一的日期:
SELECT DATEADD(day,-DATEPART(weekday,getdate())-5,getdate())
得到上周日的日期:
SELECT DATEADD(day,-DATEPART(weekday,getdate())+1,getdate())
得到上个月月末日期:
SELECT dateadd(day,-datepart(day,getdate()),getdate())
上月第一天
SELECT CONVERT(CHAR(10),DATEADD(month,-1,DATEADD(dd,-DAY(GETDATE())+1,GETDATE())),111)
本月第一天
select dateadd(dd,-datepart(dd,getdate())+1,getdate())
本月最后一天(当前为2011-03-31时会出错) 选用:select dateadd(dd,-DAY(dateadd(mm,1,'2011-12-20')) ,dateadd(mm,1,'2011-12-20'))
select dateadd(dd,-datepart(dd,getdate()) ,dateadd(mm,1,getdate()))
下月第一天
select dateadd(dd,-datepart(dd,getdate())+1,dateadd(mm,1,getdate()))
下月最后一天
SELECT CONVERT(CHAR(10),DATEADD(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+2,0)),111)+' 23:59:59'
季度第一天
SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)
季度最后一天(直接推算法)
SELECT DATEADD(Day,-1,CONVERT(char(8),DATEADD(Month,1+DATEPART(Quarter,getdate())*3-Month(getdate()),getdate()),120)+'1')
季度的最后一天(CASE判断法)
select DATEADD(Month,DATEPART(Quarter,getdate())*3-Month(getdate()),getdate())
本月第一个星期一
SELECT DATEADD(wk, DATEDIFF(wk, '', DATEADD(dd, 6 - DAY(getdate()), getdate())), '')
今年第一天
SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)
今年最后一天
SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1,0))
指定日期所在周的任意一天
SELECT DATEADD(Day,@number-DATEPART(Weekday,@dt),@dt)--5.指定日期所在周的任意星期几
A. 星期天做为一周的第1天
SELECT DATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-1)%7,@dt)
B. 星期一做为一周的第1天
SELECT DATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-2)%7-1,@dt)
周内的第几日
select datepart(weekday,getdate()) as 周内的第几日
年内的第几周
select datepart(week,getdate()) as 年内的第几周
年内的第几季
select datepart(quarter,getdate()) as 年内的第几季

快速高效创建数字辅助表

--创建数字辅助表
SET NOCOUNT ON IF OBJECT_ID('dbo.Nums') IS NOT NULL DROP TABLE dbo.Nums;
CREATE TABLE dbo.Nums(n INT NOT NULL PRIMARY KEY ); DECLARE @max AS INT ,@rc AS INT ;
SET @max=10000;
SET @rc=1; INSERT INTO dbo.Nums VALUES (1);
WHILE @rc * 2 <= @max
BEGIN
INSERT INTO dbo.Nums SELECT n + @rc FROM dbo.Nums ;
SET @rc = @rc * 2;
END INSERT INTO dbo.Nums
SELECT n + @rc FROM dbo.Nums WHERE n + @rc <= @max; SELECT COUNT (n) FROM Nums

  练习:将下面表1每行字符串转化为表2格式

/*PlanDetailID  Description
1 课程详细安排1,课程详细安排1.1,课程详细安排1.2,课程详细安排1.3
2 课程详细安排2,课程详细安排2.1,课程详细安排2.2
3 课程详细安排3,课程详细安排3.1,课程详细安排3.2,课程详细安排3.3,课程详细安排3.4
4 课程详细安排4
5 课程详细安排5 转化为:
PlanDetailID pos Description
1 1 课程详细安排1
1 2 课程详细安排1.1
1 3 课程详细安排1.2
1 4 课程详细安排1.3
2 1 课程详细安排2
2 2 课程详细安排2.1
2 3 课程详细安排2.2
3 1 课程详细安排3
3 2 课程详细安排3.1
3 3 课程详细安排3.2
3 4 课程详细安排3.3
3 5 课程详细安排3.4
4 1 课程详细安排4
5 1 课程详细安排5
*/

  参考SQL:

--生成副本,按逗号的个数,n为逗号的位置(默认第一位为逗号)
SELECT PlanDetailID ,
Description ,
n
FROM dbo.T_PlanDetail
INNER JOIN dbo.Nums ON n <= LEN(Description) + 1 --若无AND,则表示按字符个数来生成行数
AND SUBSTRING(',' + Description, n, 1) = ',' ;--将含有逗号时候的行输出 --计算每一个字符串的长度
SELECT PlanDetailID ,
SUBSTRING(Description, n, CHARINDEX(',', Description + ',', n) - n) AS element--元素的长度等于下一个逗号的位置减该元素的开始位置
FROM dbo.T_PlanDetail
INNER JOIN dbo.Nums ON n <= LEN(Description) + 1 --若无AND,则表示按字符个数来生成行数
AND SUBSTRING(',' + Description, n, 1) = ',' ;--将含有逗号时候的行输出 --计算每个字符串在数组中的位置,按PlanDetailID 分区,按 n 排序
SELECT PlanDetailID ,ROW_NUMBER() OVER(PARTITION BY PlanDetailID ORDER BY n) AS pos,
SUBSTRING(Description, n, CHARINDEX(',', Description + ',', n) - n) AS element
FROM dbo.T_PlanDetail
INNER JOIN dbo.Nums ON n <= LEN(Description) + 1 --若无AND,则表示按字符个数来生成行数
AND SUBSTRING(',' + Description, n, 1) = ',' ;--将含有逗号时候的行输出
在sql server中经常有这样的问题:
一个表采用了自动编号的列之后,由于测试了好多数据,自动编号已累计了上万个。
现在正是要用这个表了,测试数据已经删了,遗留下来的问题 就是在录入新的数据,编号只会继续增加,已使用过的但已删除的编号就不能用了,
谁知道如何解决此问题? truncate命令不但会清除所有的数据,还会将IDENTITY的SEED的值恢复到原是值。
作者:欢醉 
出处:http://www.cnblogs.com/zhangs1986/ 
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

你真的会玩SQL吗?实用函数方汇总的更多相关文章

  1. 你真的会玩SQL吗?实用函数方法汇总

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  2. 你真的会玩SQL吗?表表达式,排名函数

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  3. 你真的会玩SQL吗?之逻辑查询处理阶段

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  4. 你真的会玩SQL吗?和平大使 内连接、外连接

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  5. 你真的会玩SQL吗?三范式、数据完整性

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  6. 你真的会玩SQL吗?让人晕头转向的三值逻辑

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  7. 你真的会玩SQL吗?EXISTS和IN之间的区别

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  8. 你真的会玩SQL吗?无处不在的子查询

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  9. 你真的会玩SQL吗?Case也疯狂

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

随机推荐

  1. Java多线程-工具篇-BlockingQueue

    前言: 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题.通过这些高效并且线程安全的队列 类,为我们快速搭建高质量的多线程程序带来极大的 ...

  2. Android 混合开发 的一些心得。

    其实所谓这个混合开发,也就是hybird,就是一些简单的,html5和native 代码之间的交互.很多电商之类的app里面都有类似的功能, 这种东西其实还是蛮重要的,主要就是你有什么功能都可以进行热 ...

  3. MySQL修改root密码的几种方法

    方法1: 用SET PASSWORD命令 首先登录MySQL. 格式:mysql> set password for 用户名@localhost = password('新密码'); 例子:my ...

  4. 【LeetCode 236】Lowest Common Ancestor of a Binary Tree

    Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According ...

  5. C语言的 (强制类型转换) 以及 '字符字面值'

    C语言的显式/隐式类型转换,都有一个中间变量的存在,原数据的类型.内容都不变. 以下代码,都用GCC编译. #include<stdio.h> int main() { char c = ...

  6. 牛课--C/C++

    引用是除指针外另一个可以产生多态效果的手段. //引用是除指针外另一个可以产生多态效果的手段. #include<iostream> using namespace std; class ...

  7. linux c多线程编程范例

    #include <stdio.h> #include <pthread.h> #include <unistd.h> #include <stdlib.h& ...

  8. TCP/IP 相关知识点与面试题集

    第一部分:TCP/IP相关知识点 对TCP/IP的整体认 链路层知识点 IP层知识点 运输层知识点 应用层知识点 (这些知识点都可以参考:http://www.cnblogs.com/newwy/p/ ...

  9. 两个实用的Python的装饰器

    两个实用的Python的装饰器 超时函数 这个函数的作用在于可以给任意可能会hang住的函数添加超时功能,这个功能在编写外部API调用 .网络爬虫.数据库查询的时候特别有用 timeout装饰器的代码 ...

  10. 基于Heritrix的特定主题的网络爬虫配置与实现

    建议在了解了一定网络爬虫的基本原理和Heritrix的架构知识后进行配置和扩展.相关博文:http://www.cnblogs.com/hustfly/p/3441747.html 摘要 随着网络时代 ...