![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
SQL SERVER常用写法
二月十六
数据库交流群:195233677
展开
-
SQLServer FORMAT函数
每种区域设置都定义了一组特定的规则和格式,用于格式化日期、时间、货币、数字和其他数据类型。参数是要格式化的数据,可以是任何有效的SQL Server数据类型,如数字、日期和时间等。函数用于将数值、日期和时间等数据类型格式化为指定的格式,并返回一个格式化后的字符串。需要注意的是,不同的区域设置可能具有不同的约定和惯例,因此使用。函数的使用需要一定的计算资源,因此在处理大量数据时,应该谨慎使用。参数是一个可选参数,如果未指定,则使用当前会话的区域设置。参数是一个可选参数,用于指定用于格式化数据的区域设置。原创 2023-03-18 23:40:01 · 6972 阅读 · 0 评论 -
SQLServer查询所有包含某文本的存储过程、视图和函数的SQL
有时候我们改某个字段,但是不知道该字段在哪个存储过程或者视图中使用,可以通过该语句查询这个字段在哪里应用过。原创 2023-03-17 21:55:13 · 1674 阅读 · 0 评论 -
SQLServer使用语句添加备注
有效输入包括:ASSEMBLY、CONTRACT、EVENT NOTIFICATION、FILEGROUP、MESSAGE TYPE、PARTITION FUNCTION、PARTITION SCHEME、REMOTE SERVICE BINDING、ROUTE、SCHEMA、SERVICE、USER、TRIGGER、TYPE、PLAN GUIDE 和 NULL。需求是用语句添加备注,但是我们用到的方法是一个很成熟的自带的方法sp_addextendedproperty。要添加的属性的名称。原创 2023-03-16 11:13:06 · 2371 阅读 · 0 评论 -
SQLServer连续数据问题
SQLServer连续数据问题原创 2023-03-15 22:32:48 · 1210 阅读 · 0 评论 -
SQLserver sp_rename的用法
SQLserver sp_rename的用法原创 2023-02-14 13:44:04 · 3911 阅读 · 0 评论 -
SQLSERVER 批量删除表数据
批量删除SQLSERVER数据库表数据原创 2022-02-21 22:39:11 · 3846 阅读 · 0 评论 -
SQLSERVER 中位数
用SQLSERVER取中位数,比较着急,先这么写了,在论坛里发了个帖子https://bbs.csdn.net/topics/397444283,有更好的写法,欢迎讨论,代码如下:--测试数据if not object_id(N'Tempdb..#T') is null drop table #TGoCreate table #T([id] INT,tcount DECIMAL(18,2))Insert #Tselect 1,1 union allselect 1,2 un...原创 2020-08-14 15:50:27 · 1438 阅读 · 0 评论 -
SQL SERVER 判断字母大小写
CREATE FUNCTION dbo.Test_1 (@S VARCHAR(100))RETURNS VARCHAR(100)ASBEGIN DECLARE @re NVARCHAR(20) IF ascii(@S) BETWEEN ascii('A') AND ascii('Z') BEGIN SET @re = '是大写'; END...原创 2020-02-21 08:10:03 · 3000 阅读 · 0 评论 -
SQL SERVER获取字符串中小写字母
有时候我们会截取字符串中的一些特殊想要的东西,大小写字母、模号、汉字、数字等等,今天先介绍一个获取字符串中小写字母(也是大写字母)的方式,直接上写法:DECLARE @s VARCHAR(MAX)= 'AbcdEf奥奥' --待截取字符串DECLARE @temp VARCHAR(MAX)='' --临时变量SELECT @temp=@temp+SUBSTRING(c...原创 2018-05-15 08:44:16 · 5530 阅读 · 0 评论 -
SQL SERVER 分页(1)——利用ROW_NUMBER实现分页
我们在开发过程中,分页是十分常见的功能,在SQL SERVER 2012之前一般使用ROW_NUMBER来实现分页的功能,测试数据如下:--测试数据 if not object_id(N'T') is null drop table T Go Create table T([ID] int,[姓名] nvarchar(22)) Insert T sel...原创 2018-06-11 14:33:33 · 6283 阅读 · 0 评论 -
SQL SERVER STUFF小技巧
今天介绍一个STUFF函数的小技巧,stuff函数: STUFF ( character_expression , start , length ,character_expression ),对一个字符串character_expression ,从第几位开始start,用character_expression 替换,多长的length 字符,比如:select ST...原创 2018-07-11 22:19:47 · 3848 阅读 · 0 评论 -
SQL SERVER 用for xml path自动转义尖括号问题
有时候我们的数据库中有尖括号,然后有用到xml的时候,sql会自动的把尖括号进行转义,但是我们不需要需要,对这个有要求,我们可以用value的形式来实现,测试数据:--测试数据if not object_id(N'Tempdb..#T') is null drop table #TGoCreate table #T([ID] int,[Chemistry] nvarchar(47...原创 2018-07-05 20:44:34 · 6800 阅读 · 0 评论 -
SQL SERVER ParseName分隔字符串
ParseName是一个分隔字符串的函数,根据“.”作为分隔符,快速获取分解后的部分,直接上例子:DECLARE @ip NVARCHAR(200) = '192.168.1.2';SELECT PARSENAME(@ip, 1) AS col1, PARSENAME(@ip, 2) AS col2, PARSENAME(@ip, 3) AS col3...原创 2018-08-26 21:22:42 · 13359 阅读 · 2 评论 -
SQL SERVER Json 解析方法
整理记录一个Json解析的函数方法,方法如下: Create FUNCTION [dbo].[parseJSON]( @JSON NVARCHAR(MAX)) RETURNS @hierarchy TABLE ( element_id INT IDENTITY(1, 1) NOT NULL, /* internal surrogate primary key ...原创 2018-09-25 10:45:02 · 14891 阅读 · 3 评论 -
SQL SERVER 读取次大值或次小值
很多时候我们查询数据都是查询最大值或者最小值,一般都是利用Max或者Min函数来实现,一般很少求次大值的,其实实现也很简单,记录一下为大家提供一下思路,这篇博客介绍一下利用ROW_NUMBER PARTITION BY怎么求次大值(次小值)。 测试数据:--测试数据if not object_id(N'Tempdb..#T') is null drop t...原创 2018-12-07 09:05:34 · 3831 阅读 · 0 评论 -
SQL SERVER 截取多个分隔符中指定第几个分隔符的前边的内容
又是一个难懂的标题,上例子吧,比如一个字符串,‘abc,1344,343,13as,33,343’,这个字符串都是用','分隔的,现在想截取第四个逗号前边所有的内容,方法如下:CREATE FUNCTION [dbo].[Get_StrArrayStrOfIndex]( @str VARCHAR(1024), --要分割的字符串 @split VARCHAR(...原创 2018-12-07 14:55:37 · 9667 阅读 · 0 评论 -
SQL SERVER跨表计算列
我们的表字段有时候要用到计算列,有时候计算列需要跨表计算,但是直接加入查询语句报错,我们可以使用函数来实现跨表计算列功能。 测试数据:--测试数据if not object_id(N'user') is null drop table [user]GoCreate table [user]([uid] int)Insert [user]select ...原创 2018-12-17 09:17:06 · 3161 阅读 · 0 评论 -
SQL SERVER交叉重复去重
去重是SQL SERVER里边一项常用的功能,一般用DISTINCT关键字来实现,但是DISTINCT只能去重完全相同的内容,如果是有两个字段,交叉重复去重,还需要特殊处理一下,方法如下:--测试数据if not object_id(N'Tempdb..#T') is null drop table #TGoCreate table #T([字段A] nvarch...原创 2019-08-03 08:31:36 · 2472 阅读 · 0 评论 -
SQL SERVER求每行最大列值
我们一般都是求某一列的最大值,但是偶尔也会有求每一行中的最大值,今天介绍一下,每行最大值的写法--测试数据if not object_id(N'T') is null drop table TGoCreate table T([id1] int,[id2] int,[id3] int)Insert Tselect 1,2,3union allselect...原创 2019-08-11 18:54:41 · 2521 阅读 · 0 评论 -
SQL SERVER 添加字段说明语句
使用SQL语句添加数据库字段的说明,测试表如下:--测试数据if not object_id(N'T') is null drop table TGoCreate table T([Id] int,[Name] nvarchar(22))Insert Tselect 1,N'张三' union allselect 2,N'李四'Go--测试数据结束Selec...原创 2019-10-06 22:06:34 · 9159 阅读 · 0 评论 -
SQL SERVER EXCEPT、INTERSECT 用法
EXCEPT主要是用来获取两个结果集的差;两个结果用EXCEPT链接,返回第一个结果集不在第二个结果集中的数据。INTERSECT主要是用来获取两个结果集的交集;两个结果用INTERSECT链接,返回两个结果集中的相同部分,测试数据:--测试数据if not object_id(N'Tempdb..#T1') is null drop table #T1GoCreate ta...原创 2018-03-30 11:14:46 · 15055 阅读 · 0 评论 -
SQL SERVER 获取差值最小的数据
分享一个小技巧,获取和自己差值最小的数据,测试数据如下:--测试数据if not object_id(N'Tempdb..#T1') is null drop table #T1GoCreate table #T1([code] int,[value] int)Insert #T1select 1,10 union allselect 2,50 union allse...原创 2018-05-07 14:06:09 · 6862 阅读 · 0 评论 -
SQL SERVER 读取数据库中所有表名
分享一个小技巧,我们有时候在操作数据库时,不管是统计还是做动态语句拼接操作,需要读取所有数据表的名字,我们可以使用下边的语句来读取所有表名:SELECT nameFROM sysobjectsWHERE xtype = 'u'; 结果: 除了上边的语句,我们还可以使用sp_MSforeachtable来实现,读取语句如下:EXEC sp_MSforeacht...原创 2018-05-04 17:54:38 · 7152 阅读 · 0 评论 -
SQL SERVER 行列转换(1)——聚合函数静态转换
在实际开发中,有时候需要对数据表进行行列转换,转换之后再显示对应的数据,行列转换的方法比较多,本次介绍静态的利用聚合函数来实现,行转列测试数据:--测试数据if not object_id(N'Tempdb..#T') is null drop table #TGoCreate table #T([Name] nvarchar(22),[Subject] nvarchar(22...原创 2018-04-09 11:09:57 · 5802 阅读 · 0 评论 -
SQL SERVER MERGE 有则更新无则插入
我们在处理数据的时候,往往会有“有则更新、无则插入”的需求,在SQL 2008 之前,通常是通过if 判断等,来做查询处理,SQL 2008 引入了MERGE ,可以更好的实现我们的需求,测试数据:--测试数据if not object_id(N'SourceTable') is null drop table SourceTableGoCREATE TABLE DB...原创 2018-04-09 10:07:06 · 10896 阅读 · 0 评论 -
SQL SERVER 90度行列互换
我们有时候在处理数据显示的时候,需要把之前的数据进行90度的行列互转(注:不是行转列),数据处理起来比较麻烦,提供一个方法,测试数据:--测试数据if not object_id('tab') is null drop table tab Go Create table tab(a0 NVARCHAR(100),a1 int,a2 int,a3 int) In...原创 2018-04-08 15:53:17 · 5423 阅读 · 0 评论 -
SQL SERVER 利用触发器禁止删除数据并记录删除日志
有时候我们数据库表中的数据会莫名其妙的被删除,不知道是业务问题还是被黑了,所以我们想要在数据库操作层面对此进行制止,同时记录操作的日志,我们可以利用触发器来实现这个需求,测试数据:--测试数据if not object_id(N'T') is null drop table TGoCreate table T([ID] int,[姓名] nvarchar(22))I...原创 2018-04-08 10:26:46 · 19461 阅读 · 2 评论 -
SQL SERVER FOR XML PATH 用法
有时候我们需要把多行数据,合并成一行显示,并用逗号或者其他方式分隔显示,这时候我们可以使用FOR XML PATH的方式,来实现需求。测试数据如下:--测试数据if not object_id(N'Tempdb..#T') is null drop table #TGoCreate table #T([Province] nvarchar(22),[City] nvarchar...原创 2018-03-24 11:08:21 · 17448 阅读 · 0 评论 -
SQL SERVER 递归查询(4)——递归层级查询
我们在做递归查询的时候,有时候需要查询特定某一级的数据,如果我们的数据上没有标注该数据的层级数,那么我们可以在递归的时候自己加一个,并在读取的时候作为查询条件来用,测试数据:--测试数据 if not object_id(N'Tempdb..#T') is null drop table #T Go Create table #T([Id] int,[Name]...原创 2018-03-19 16:40:38 · 15886 阅读 · 0 评论 -
SQL SERVER 递归查询(3)——分组递归
有时候我们需要按照分组递归查询,比如省市区,同一个省同一个市的要放到一起显示,而我们原始数据又不是这样排列的,所以需要我们做一下处理,测试数据:--测试数据if not object_id(N'Tempdb..#T') is null drop table #TGoCreate table #T([Id] int,[Name] nvarchar(24),[FatherId] i...原创 2018-03-17 16:49:45 · 11517 阅读 · 0 评论 -
SQL SERVER 递归查询(2)——向下递归计算
向上向下累加减,是常用递归来实现的,在上篇博客中,介绍了递归的函数和CTE写法,并把向上累加做例子介绍了,这次我们介绍一下向下做减的写法,计算每月的余额,测试数据:--测试数据if not object_id(N'Tempdb..#T') is null drop table #TGoCreate table #T([id] INT,[month] nvarchar(23...原创 2018-03-16 22:19:23 · 30390 阅读 · 2 评论 -
SQL SERVER 行列转换(2)——PIVOT、UNPIVOT 转换
上篇博客介绍了静态方式的行列转换,这次介绍一下利用SQL SERVER 函数实现的行列转换,行转列测试数据同之前的一样:--测试数据 if not object_id(N'Tempdb..#T') is null drop table #T Go Create table #T([Name] nvarchar(22),[Subject] nvarchar(22...原创 2018-04-09 11:29:37 · 6766 阅读 · 0 评论 -
SQL SERVER 行列转换(3)——动态转换
前边介绍了静态转换和PIVOT、UNPIVOT转换的方式,这次介绍一下动态拼接转换的形式,有时候我们的数据不是固定的,可能会有多条,所以需要我们动态进行拼接实现,行转列测试数据:--测试数据if not object_id(N'Tempdb..#T') is null drop table #TGoCreate table #T([Name] nvarchar(22),[S...原创 2018-04-09 13:34:22 · 16263 阅读 · 0 评论 -
SQL SERVER 连乘写法
SQL SERVER 提供了SUM、COUNT、MAX、MIN、AVG等聚合函数,但是没有提供连乘的函数,但是在实际开发过程中,我们可能会用到连乘的数据,所以我们可以自己实现连乘的写法,测试数据:--测试数据if not object_id(N'Tempdb..#T') is null drop table #TGoCreate table #T([num] int)Ins...原创 2018-04-03 17:05:05 · 7321 阅读 · 0 评论 -
SQL SERVER LEAD和LAG函数
SQL Server从2012开始,引入了LEAD和LAG函数,这两个函数可以把之前要关联查询的方法,改为可直接获取当前数据上下相邻多少行数据,描述的有点不清楚,上数据吧,测试数据:--测试数据if not object_id(N'Tempdb..#T') is null drop table #TGoCreate table #T([Id] int,[Value] int)...原创 2018-05-10 09:42:35 · 20443 阅读 · 0 评论 -
SQL SERVER 利用spt_values 生成连续日期数据
有时候我们在展示数据的时候想要展示本月所有天数的数据,但是我们数据库里只存储了有数据的日期,当天没有数据插入的数据就没有存储,例如这样:--测试数据if not object_id(N'Tempdb..#T') is null drop table #TGoCreate table #T([DataTime] Date,[DataValue] int)Insert #T...原创 2018-04-21 09:08:44 · 8350 阅读 · 0 评论 -
SQL SERVER查询区分大小写
一般SQL Server数据库在查询数据的时候,都是默认不区分大小写的,但是如果我们有特殊需要,要对数据查询的时候区分大小写,我们可以使用COLLATE 来实现这个需求,测试数据:--测试数据if not object_id(N'Tempdb..#T1') is null drop table #T1GoCreate table #T1(name VARCHAR(50))I...原创 2018-05-02 20:57:39 · 12479 阅读 · 0 评论 -
SQL SERVER 字符串自增列
有时候我们对自增的主键有特殊的要求,不仅仅是数值型自增长,可能还要类似特殊字符+时间+自增长数值这样的效果,这样的需求,可以在新建表的时候,对自增主键进行设置,实现方法如下:CREATE TABLE testtab( ID INT IDENTITY, PRIMARYKEY AS 'T' + CONVERT(VARCHAR(100), GETDATE(), 112) ...原创 2018-05-01 15:14:44 · 12255 阅读 · 2 评论 -
SQL SERVER 利用ROW_NUMBER 删除重复数据
分享一个小知识点,论坛里也常有人问这种问题,表中数据除了ID不同,其他数据一样,然后保存ID最大(或者最小)值,测试数据:--测试数据if not object_id(N'Tempdb..#T') is null drop table #TGoCreate table #T([ID] int,[Name] nvarchar(22),[Class] int)Insert #...原创 2018-04-19 08:36:27 · 13180 阅读 · 1 评论 -
SQL SERVER 表分区技术
当一个数据库表的数据达到千万级别的时候,这时候磁盘的I/O就成了性能的瓶颈,因此如果能提高磁盘的I/O能力,也就相应的提高了数据库的效率。SQL Server推出了表分区技术。表分区就是把一个数据库表文件拆分成多个文件,并放到不同的文件组甚至是不同的磁盘中,但是在外界访问时看到的还是一个数据库表,这样不同的磁盘不同的文件组可以提高并发访问效率,而对于开发技术人员来说面对还只是那一张表,和单表没有区...原创 2018-04-08 08:08:54 · 10096 阅读 · 1 评论