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 语句有多么 ...
随机推荐
- mysql绑定参数bind_param原理以及防SQL注入
假设我们的用户表中存在一行.用户名字段为username.值为aaa.密码字段为pwd.值为pwd.. 下面我们来模拟一个用户登录的过程.. <?php $username = "aa ...
- BZOJ 2763 飞行路线(分层图最短路)题解
题意:中文题意不解释... 思路:分层图最短路,我们再开一维用来表示当前用了多少次免费次数,dis[i][j]就表示到达i点用了j次免费的最短路,有点DP的感觉. 当个模板用 参考:分层图最短路 代码 ...
- UVa 11404 回文子序列(LCS求最长回文串长度)
https://vjudge.net/problem/UVA-11404 题意: 给定一个由小写字母组成的字符串,删除其中的0个或多个字符,使得剩下的字母(顺序不变)组成一个尽量长的回文串.如果有多解 ...
- POJ 1047 Round and Round We Go
https://vjudge.net/problem/POJ-1047 题意: 给一个整数,它的长度为n,从1开始一直到n和该整数相乘,判断每次结果是否和原来的整数是循环的. 思路: 大整数的乘法. ...
- R语言笔记-set.seed()函数
今天查了一下R语言中set.seed(),该命令的作用是设定生成随机数的种子,种子是为了让结果具有重复性.如果不设定种子,生成的随机数无法重现. set.seed()用于设定随机数种子,一个特定的种子 ...
- php 数值数组遍历
<?php $cars=array("Volvo","BMW","Toyota"); $arrlength=count($cars); ...
- install ros-indigo-laser-geometry
-- Using these message generators: gencpp;genlisp;genpy CMake Warning at /opt/ros/indigo/share/catki ...
- python 浮点数转分数
from fractions import Fraction value = 4.2 print(Fraction(value).limit_denominator())
- css可应用的渐进增强新特性
1. 让有滚动行为的元素平滑滚动 scroll-behavior: smooth; <div class="smooth"> </dvi> .smooth ...
- hdu 5696 区间的价值
套路题 求出来以每个数为最大值/最小值时的一个区间范围, 然后枚举每个数为最大值的情况更新即可, 但是对于重复数的话需要特判一下, 假如用map记录来特判复杂度就是$O(nlogn)$, 不过题目说了 ...