SQL 知识及用法备忘录
---查询当前数据库一共有多少张表
select COUNT(1) from sysobjects where xtype='U' ---查询当前数据库有多少张视图
select COUNT(1) from sysobjects where xtype='V'
---查询当前数据库 有多少个存储过程
select COUNT(1) from sysobjects where xtype='P'
-- row_number()函数用法 row_number() over (order by cloumn) from tableName
select ROW_NUMBER() over (order by cardNo ),* from T_ValueCard select type from sysobjects group by type
--
select * from sysobjects --查询的时候临时生成自定义数据列
select 'Web' as SourceName,* from TM_Goods
--生成空列数据
select '' as SourceName, * from TM_Goods
--- 所查列的值出现特殊结果字符 给这个结果字符加单引号 如下所示的Sex字段
select top 20 ID, GuestName,MemNo,CardNo, [Identity], BagNo,BoxNo,case Sex when 'M' then '男' when 'F' then '女' end as Sex,Holes,
case [Status] when 1 then '已预约' when 2 then '已来场登记' when 3 then '已球场登记' when 4 then '已出发'
when 5 then '已离场' when 6 then '已结账' when 7 then '退回结账' when -1 then '已取消预约' when -2 then '取消登记'
when 0 then '未知' end as [Status],
StrategyCode, CreateTime,CheckinTime, Creator, CheckOutTime, CheckoutUser,
LastEditTime, LastEditor ,ExpiryDate, MainCardNo,
SalemanCode from Checkin
---查询的时候如果结果里面包含空格或者特殊字符可以等量替换然后在进行查询
select * from TM_Goods where REPLACE(Name,' ','')=REPLACE('海立得 车载型空气净化机',' ','')
--查询当前数据库所有的表
select * from Dbserver..sysobjects where xtype='U'
--使用sp_addextendedproperty添加描述信息
-- 给表添加描述信息 table
EXECUTE sp_addextendedproperty N'MS_Description', '描述内容', N'user', N'dbo', N'table', N'表名', NULL, NULL -- 给表中的列添加描述信息 column
EXECUTE sp_addextendedproperty N'MS_Description', '描述内容', N'user', N'dbo', N'table', N'表名', N'column', N'字段名'
--修改表中列的长度
alter table T_DataDictionary
alter column Value varchar(50)
--查询关键词带有空格符的数据
select * from TM_OrderDetail where REPLACE(Name,' ','')=REPLACE('迪斯尼 笑脸米奇丝绒毯',' ','') --模糊查询关键词带有空格符的数据
--select * from TM_Goods where REPLACE(Name,' ','') like '%'+REPLACE('海立得 ',' ','')+'% --条件区分大小写语法
select * from tablename where column1 collate Chinese_PRC_CS_AS= 'Xxxx'
select * from s where sn collate Chinese_PRC_CS_AS like 'L%'
--CI 指定不区分大小写,CS 指定区分大小写。
--AI 指定不区分重音,AS 指定区分重音。
--Omitted 指定不区分大小写,WS 指定区分大小写。 --区分大小写查询例子
select * from MemberEntity where MemNo collate Chinese_PRC_CS_AS= 'M_001'
--select * from MemberEntity where MemNo collate Chinese_PRC_CS_AS= 'm_001' --触发器
if not exists (select * from sysobjects where id=OBJECT_ID('Student') and name='Student')
begin
create table Student --学生表
(
StudentID int primary key, --学号
StudentName nvarchar(15) --姓名
)
end if not exists (select * from sysobjects where id=OBJECT_ID('BorrowRecord') and name='BorrowRecord')
begin
create table BorrowRecord --借书记录表
(
RecordID int primary key, --流水号
StudentID int, --学号
OutTime datetime, --借出时间
ReturnDate datetime --归还时间
)
end --为表添加描述信息
EXECUTE sp_addextendedproperty N'MS_Description', '借书记录表', N'BorrowRecord', N'dbo', N'table', N'表', NULL, NULL
--为字段a1添加描述信息
EXECUTE sp_addextendedproperty N'MS_Description', '学号', N'user', N'dbo', N'table', N'BorrowRecord', N'column', N'StudentID'
--创建触发器语法
create trigger trigger_name
on {table_name | view_name}
{for | After | Instead of } [ insert, update,delete ] as sql_statement --删除触发器 drop trigger trigger_name
--查看当前数据库的触发器
select * from sysobjects where type='TR'
--查看某个触发器
exec sp_helptext 'TStudent' --触发器实例----触发器是属于隐式的
create trigger TStudent
on Student --在Student表中创建触发器
for Update --针对什么事件触发
as --时间触发后要做的事情
if update(StudentID)
begin
Update BorrowRecord
set StudentID=i.StudentID
from BorrowRecord br,Deleted d,Inserted i --Deleted和Inserted为临时虚拟表
where br.StudentID=d.StudentID
end
go
sql 中对列值(Code='023,033')进行逗号分割
-----------------------------------------split函数开始
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: wgx
-- Create date: 2010-09-28
-- Description: 实现split功能的函数
-- =============================================
ALTER function [dbo].[F_Split](@SourceSql varchar(8000),@StrSeprate varchar(10)) returns @temp table(a varchar(100)) as begin
declare @i int set @SourceSql=rtrim(ltrim(@SourceSql))
set @i=charindex(@StrSeprate,@SourceSql) while @i>=1 begin
insert @temp values(left(@SourceSql,@i-1))
set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
set @i=charindex(@StrSeprate,@SourceSql)
end if @SourceSql<>'' insert @temp values(@SourceSql)
return
end
-----------------------------------------split函数结束
--用法
declare @str1 varchar(8000)
select @str1 = StartID from T_TtimeCaddy where ID=111230
select * from dbo.F_Split(@str1,',') split 分割函数(2):
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: wgx
-- Create date: <Create Date, ,>
-- Description: 实现表中列的值进行分割
--知识点如下:
-- 1.Left(原始字符串,位数): Left函数用来取字符串的前几位
-- Left('269,268,267,266',3) 结果:269
-- 2.CHARINDEX函数(字符,原始字符串): 取字符在字符串出现第一次的索引
-- CHARINDEX(',', '269,268,267,266') 结果:4
-- 3.STUFF(列名,开始位置,长度,替代字符串): STUFF()函数用于删除指定长度的字符,并可以在制定的起点处插入另一组字符
-- STUFF('269,268,267,266', 1, 4, '')结果: 268,267,266
-- =============================================
ALTER FUNCTION [dbo].[F_Split]
(
@Str varchar(8000)
)
RETURNS @ReturnTable table(
Id int identity(1,1),
value varchar(50)
)
AS
BEGIN
declare @pos int
set @pos=charindex(',',@str)
while @pos>0
begin
INSERT @ReturnTable(value) VALUES(LEFT(@str, @pos - 1))
SELECT
@str = STUFF(@str, 1, @pos, ''),
@pos = CHARINDEX(',', @str)
end
IF @str >''
insert @ReturnTable(value) values(@str)
return
END
用法:select * from F_Split('269,268,267,266',',')
分割后的效果:

alter table 需要建立外键的表 add constraint 外键名字 foreign key references 外键表(外键字段)
--返回上一语句受影响的行数
@@ROWCOUNT
--使用示例
update T_Round set IsBet=0 where ID=4508
if @@rowcount>0
begin
print '成功'
end
else
begin
print '失败'
end
--IsNull函数 使用指定的替换值替换 NULL。
--语法:ISNULL ( check_expression , replacement_value )
select ISNULL(SubType,'' )as 类型,* from T_Product where ID=703
--表总数
select Count(ID) from BillItem
--按年统计数据
select count(Price) as sumValue from BillItem where YEAR(CreateTime)=2013
select count(Price) as sumValue from BillItem where YEAR(CreateTime)=2014
select count(Price) as sumValue from BillItem where YEAR(CreateTime)=2015
--统计当前月的所有数据
select Count(*) from BillItem where MONTH(CreateTime)=12
--按年和月统计数据
select Count(*) from BillItem where YEAR(CreateTime)=2013 and MONTH(CreateTime)=12
使用sql自带的四舍五入函数Round(要转换的数据,保留的位数)
select TotalRent,ROUND(TotalRent,) from TBL_CONTRACT_BasicInfo 第一个参数是我们要被操作的数据,第二个参数是设置我们四舍五入之后小数点后显示几位

case when 中null 判断:
select
a.IsCost,
case when a.IsCost is null then '未算' else '已算' end as IsCostStr,
b.FeeBalance,
case b.FeeBalance when 0 then '已缴' else '未缴' end IsPayState
from TBL_LeasebackContract_Details as a
left join TBL_Charge_CostingInfo as b on a.ID=b.ID
where 1=1

-----------------------------------------------------同步相同结构数据库的同一个表中的记录-----------------------------------------------------
--语法
insert into 数据库2.dbo.表1 select * from 数据库1.dbo.表1 --实例
insert into pms_common.dbo.TBL_Estate_BuildingInfomation
select * from gdjdb.dbo.TBL_Estate_BuildingInfomation
-----------------------------------------------------同步相同结构数据库的同一个表中的记录-----------------------------------------------------
--------------查询登陆大于等于1次的登陆用户的IP地址-----------
select IPAddress from SysLoginLog
3 group by IPAddress having count(1)>=1

---同一个表的俩字段,根据某个列值判断是否为空来付给同一张表中的另一列
select EndDate,StopDate,case when StopDate is not null then StopDate else EndDate end as NewEndDate from TBL_CONTRACT_BasicInfo
--循环更改图片路径 declare @id int,@url varchar(250) set @id=1; while(@id<22)
begin
set @url='temp/img'+CONVERT(varchar,@id)+'.jpg'
--print @url update Shop_CompanyInfo set com_topcontpic=@url where com_id=@id set @id=@id+1;
end
go
行转列查询:
select T2.code,T2.nub from
(
select ISNULL(SUM(上班次数), 0) as 上班,
ISNULL(SUM(请假次数), 0) as 请假,
ISNULL(SUM(出差次数), 0) as 出差,
ISNULL(SUM(休假次数), 0) as 休假,
ISNULL(day(dateadd(mm, 1, '2018-10-01 00:00:00.000') - day('2018-10-01 00:00:00.000')) - sum(请假次数 + 出差次数 + 休假次数), 0) as 未打卡
from View_AttendanceSummary where UserId =8 and SUBSTRING(考勤日, 1, 4) = 2018 and SUBSTRING(考勤日, 6, 2) =10
) T1
UNPIVOT
(
nub for code in(上班, 请假, 出差, 休假, 未打卡)
) T2
选中结果为行结果

转列:
select T2.code,T2.nub from
(
select ISNULL(SUM(上班次数), 0) as 上班,
ISNULL(SUM(请假次数), 0) as 请假,
ISNULL(SUM(出差次数), 0) as 出差,
ISNULL(SUM(休假次数), 0) as 休假,
ISNULL(day(dateadd(mm, 1, '2018-10-01 00:00:00.000') - day('2018-10-01 00:00:00.000')) - sum(请假次数 + 出差次数 + 休假次数), 0) as 未打卡
from View_AttendanceSummary where UserId =8 and SUBSTRING(考勤日, 1, 4) = 2018 and SUBSTRING(考勤日, 6, 2) =10
) T1
UNPIVOT
(
nub for code in(上班, 请假, 出差, 休假, 未打卡)
) T2

列转行:
--将多列数据展示成一行
SELECT CAST(用户Id as varchar)+',' FROM DB_Participant where 督办事项Id=49 FOR XML PATH('')
SELECT b.真实姓名+',' FROM DB_Participant as a left join SysUser as b on a.用户Id=b.Id where a.督办事项Id=49 FOR XML PATH('')

sqlserver -- 学习笔记(五)查询一天、一周、一个月记录(DateDiff 函数)
http://www.cnblogs.com/lmei/p/3946599.html
SQL 知识及用法备忘录的更多相关文章
- Atitit 补充说明 sql知识图谱与线路图attilax总结补充说明
Atitit 补充说明 sql知识图谱与线路图attilax总结补充说明 1. 常见编程语言的分类 :命令式语言.函数式语言.逻辑语言1 1.1. 按照编程语言的代际划分,又2gl,3gl,4gl ...
- TFS二次开发、C#知识点、SQL知识总结目录
TFS二次开发系列 TFS二次开发系列:一.TFS体系结构和概念 TFS二次开发系列:二.TFS的安装 TFS二次开发系列:三.TFS二次开发的第一个实例 TFS二次开发系列:四.TFS二次开发Wor ...
- SQL语句---nvl 用法
SQL语句---nvl 用法 一NVL函数是一个空值转换函数 NVL(表达式1,表达式2) 如果表达式1为空值,NVL返回值为表达式2的值,否则返回表达式1的值. 该函数的目的是把一个空值(nul ...
- 学习之路三十六:SQL知识总结 - [游标||字符串分割]
好久没有写文章了,今天把前不久项目用到的SQL知识总结一下. 一丶字符串分割 SQL内置函数中是没有Split分割函数的,所以需要自己去实现,不多说,上代码: )) RETURNS @result T ...
- SQL 语句日期用法及函数
SQL 语句日期用法及函数 --DAY().MONTH().YEAR()——返回指定日期的天数.月数.年数:select day(cl_s_time) as '日' from class --返回天 ...
- SQL 中ROLLUP 用法
SQL 中ROLLUP 用法 ROLLUP 运算符生成的结果集类似于 CUBE 运算符生成的结果集. 下面是 CUBE 和 ROLLUP 之间的具体区别: CUBE 生成的结果集显示了所选列中值的所有 ...
- 标准SQL语言的用法
原文链接:http://www.ifyao.com/2015/05/18/%E6%A0%87%E5%87%86%E7%9A%84sql%E8%AF%AD%E8%A8%80%E4%BD%BF%E7%94 ...
- TFS二次开发、C#知识点、SQL知识
TFS二次开发.C#知识点.SQL知识总结目录 TFS二次开发系列 TFS二次开发系列:一.TFS体系结构和概念 TFS二次开发系列:二.TFS的安装 TFS二次开发系列:三.TFS二次开发的第一 ...
- 9.mybatis动态SQL标签的用法
mybatis动态SQL标签的用法 动态 SQL MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么 ...
随机推荐
- target='_blank' 安全漏洞
有关 target="_blank" 的安全缺陷 可能大家在写网页的时候经常给超链接加个属性 target="_blank",意思就是在浏览器新的窗口打开此超链 ...
- 【定义及安装】Ambari——大数据平台的搭建利器
Ambari 是什么 Ambari 跟 Hadoop 等开源软件一样,也是 Apache Software Foundation 中的一个项目,并且是顶级项目.目前最新的发布版本是 2.0.1,未来不 ...
- Linux中重定向--转载
转:http://blog.csdn.net/songyang516/article/details/6758256 1重定向 1.1 重定向符号 > 输出 ...
- 《F4+2》——团队项目的原型设计与开发
目 录 1 · 团队信息 2 · NABCD模型 3. 原型设计的工具 4 · 原型设计 5 · PSP表格 6 · 团队设计过程 7 · 原型设计心得 一 · 团 队 信 息 成 员 列 ...
- IOS UI-标签(Label)的高级应用
// // BWLabel.h // IOS_0119_label // // Created by ma c on 16/1/19. // Copyright © 2016年 博文科技. All r ...
- bzoj2325
题解: 树链剖分 和普通的树链剖分不一样,这里的线段树不只是要记录x-y的和 而是要记录x左到y左,x左到y右,x右到y左,x右到y右 然后就可以了 代码: #include<bits/stdc ...
- 高并发数据采集的架构应用(Redis的应用)
问题的出发点: 最近公司为了发展需要,要扩大对用户的信息采集,每个用户的采集量估计约3W.如果用户量增加的话,将会大量照成采集量成3W倍的增长,但是又要满足日常业务需要,特别是报表数据必要 ...
- 彻底弄懂jQuery事件原理二
上一篇说到,我们在最外层API的on,off,tiggler,triggerHandler调用的是event方法的add,remove和tirgger方法,本篇就来介绍event辅助类 \ 先放个图, ...
- 腾讯云 服务器 ubuntu 16.04 python3 环境
积分 - 164 排名 - 183650 首先把腾讯云上的服务器,重装系统,选择64位ubuntu16.04,最低配也要用64位的…… 装好后,首先切换 python 版本: sudo update- ...
- 让opencv输出人脸检测的得分(置信率)
最近项目略多,其中一个需要找出一些和脸比较像但是不是脸的负样本,想用opencv的人脸检测器检测到的错误脸作为这样的负样本. 但是国内(包括国外)居然几乎没有相关的资料如何输出detectMultiS ...