热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SqlServer手册

1.字符串操作函数假设aabc7891.charindex返回字符或者字符串在另一个字符串中的起始位置charindex(b,a)--结果:22.substring返

1.字符串操作函数

假设@a='abc789'

1.charindex 返回字符或者字符串在另一个字符串中的起始位置

charindex('b',@a)  --结果:2

2.substring 返回字符、二进制、文本或图像表达式的一部分(截取字符串)

substring(@a,1,len($a))  --substring(@a,start,length)

结果:abc789

3.left 返回从字符串左边开始指定个数的字符

left(@a,1) --结果:a

left(@a,3) --结果:abc

4.right 返回从字符串右边开始指定个数的字符

right(@a,1)  --结果:9

right(@a,3) --结果:789

right('000000'+cast(id as varchar),7)  --左侧六位自动补零

5. patindex 返回指定表达式中某模式第一次出现的起始位置

patindex('%[^0-9]%',@a) --结果:1

patindex('%[0-9]%',@a) --结果:4

6.stuff 删除指定长度的字符并在指定的起始点插入另一组字符

stuff('abc789', 2, 3, 'ijklmn') --stuff(@a,start,length,replacestr)

结果:aijklmn89

示例:

INSERTINTO table_1(name,classid)
SELECT'苹果',1 UNIONALL
SELECT'香蕉',1 UNIONALL
SELECT'樱桃',1 UNIONALL
SELECT'可可(牛奶)'

select case charindex('(',[name]) when 0 then [name] else substring([name],0,charindex('(',[name])) end from table_1

查询结果:

...

樱桃

可可    --被截取了

7.replace替换回车、换行、回车换行符

SELECT *, REPLACE(detail, CHAR(13) , '
')

SELECT *, REPLACE(detail, CHAR(10), '
')

SELECT *, REPLACE(detail, CHAR(13) + CHAR(10), '
') 

2.表变量是否为空

SELECT@tmpCount=COUNT(1) FROM @resultTemp
IF(@tmpCount>0)
BEGIN......
END

3.sp_executesql 执行动态Sql,支持参数

DECLARE @strsql NVARCHAR(500)
SET @strsql='SELECT @total=SUM(a.total) FROM '+@DateName+'.dbo.table_1 a,TestDBA.dbo.Project b WHERE a.code=b.code'
EXEC sp_executesql @strsql,N'@total AS FLOAT OUTPUT',@alltotal OUTPUT

 4.多个字段中取最大值

select max(m)
from
(
select max(aa)m from TableNameunion allselect max(bb) from TableNameunion allselect max(cc) from TableName
) t

 5.日期函数

 1.当前系统日期、时间

    select getdate()

 2.dateadd 在向指定日期加上一段时间的基础上,返回新的 datetime 值

    例如:向日期加上2天

    select dateadd(day,2,'2004-10-15') --返回:2004-10-17 00:00:00.000

 3.datediff 返回跨两个指定日期的日期和时间边界数。

    select datediff(day,'2004-09-01','2004-09-18') --返回:17

 4.datepart 返回代表指定日期的指定日期部分的整数。

    select datepart(month, '2004-10-15') --返回 10

 5.datename 返回代表指定日期的指定日期部分的字符串

    select datename(weekday, '2004-10-15') --返回:星期五

 6. day(), month(),year() --可以与datepart对照一下

 7.当前日期、当前时间   

    select 当前日期=convert(varchar(10),getdate(),120),当前时间=convert(varchar(8),getdate(),114)

 8.本年第几周、今天周几

    select 今天是周几=datename(dw,'2004-10-15')

    select 本年第多少周=datename(week,'2004-10-15'),今天是周几=datename(weekday,'2004-10-15')  

 9.短日期格式

    select  convert(varchar(10),getDate(),120)

    select  CONVERT(VARCHAR(10),getdate(),23)

      函数                                                参数/功能
  GetDate( )                                          返回系统目前的日期与时间
  DateDiff (interval,date1,date2)              以interval 指定的方式,返回date2 与date1两个日期之间的差值 date2-date1
  DateAdd (interval,number,date)            以interval指定的方式,加上number之后的日期
  DatePart (interval,date)                        返回日期date中,interval指定部分所对应的整数值
  DateName (interval,date)                      返回日期date中,interval指定部分所对应的字符串名称

  参数 interval的设定值如下:

  值 缩 写(Sql Server)                           Access 和 ASP 说明
  年:Year             Yy         yyyy                  1753 ~ 9999
  季:Quarter        Qq         q                       1 ~ 4
  月:Month          Mm        m                      1 ~ 12
  一年的日数,一年中的第几日:Day of year        Dy          y            1-366
  日:Day             Dd         d                       1-31
  一周的日数,一周中的第几日:Weekday            Dw         w            1-7
  周,一年中的第几周:         Week                  Wk        ww          0 ~ 51
  时:Hour            Hh         h                       0 ~ 23
  分:Minute          Mi          n                       0 ~ 59
  秒:Second         Ss         s                       0 ~ 59
  毫秒:Millisecond  Ms         -                       0 ~ 999

  access 和 asp 中用date()和now()取得系统日期时间;其中DateDiff,DateAdd,DatePart也同是能用于Access和asp中,这些函数的用法也类似

  一个月第一天
  SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)

  本周的星期一

  SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)

  一年的第一天

  现在用年(yy)的时间间隔来显示这一年的第一天。

  SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)

  季度的第一天

  假如你要计算这个季度的第一天,这个例子告诉你该如何做。

  SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)

  当天的半夜

  SELECT DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)

  上个月的最后一天

  它通过从一个月的最后一天这个例子上减去3毫秒来获得。有一点要记住,在Sql Server中时间是精确到3毫秒。这就是为什么我需要减去3毫秒来获得我要的日期和时间。

  SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))

  计算出来的日期的时间部分包含了一个Sql Server可以记录的一天的最后时刻(“23:59:59:997”)的时间。

  去年的最后一天

  SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))

  本月的最后一天

  SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))

  本年的最后一天

  SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))

  本月的第一个星期一

  select DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())), 0)

 6.金额加逗号 

 DECLARE @i MONEY
 SET @i=123456789.00
 SELECT CONVERT(varchar,@i,1)

 DECLARE @i VARCHAR(50)
 SET @i=123456789.00
 SELECT CONVERT(varchar,CONVERT(money,@i),1)

7、查库名、库ID

SELECT Name FROM Master..SysDatabases ORDER BY Name

8、判断是否存在表名、存储过程、函数

--判断库是否存在
if exists(select * from master..sysdatabases where name=N'库名')
drop database 库名
GO

-- 判断要创建的表名是否存在
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[表名]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[表名]
GO

--列是否存在
IF COL_LENGTH( '表名','列名') IS NULL
alter table 表名 drop constraint 默认值名称
go
alter table 表名 drop column 列名
go

--判断要创建临时表是否存在
If Object_Id('Tempdb.dbo.#Test') Is Not Null
drop table #Test
GO

-- 判断要创建的存储过程名是否存在
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[存储过程名]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[存储过程名]
GO

-- 判断要创建的视图名是否存在
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[视图名]') and OBJECTPROPERTY(id, N'IsView') = 1)
drop view [dbo].[视图名]
GO

-- 判断要创建的函数名是否存在
if exists (select * from sysobjects where xtype='fn' and name='函数名')
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[函数名]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[函数名]
GO

 9.SQL2008配置管理工具服务显示远程过程调用失败

打开程序和功能,卸载了一个叫"Microsoft SQL Server 2012LocalDB",重新打开SQL配置管理器,发现可以了。

10.还原数据库的时候,提示"因为数据库正在使用,所以无法获得对数据库的独占访问权"

1,设置数据库在单用户模式下工作。
设置方法:在需要还原的数据库上右击,在右键菜单命令上选择"属性"- >"选项"- >"状态"- >"限制访问"- >"Single"。这是SQLSERVER2005的菜单命令,其它版本请自己查找。

2,利用SQL语句,杀死正在使用该数据库的所有进程,自己以前在做一个SQL SERVER操作小工具的时候有写过该功能的SQL,贴出来供大家参考:
代码如下:
declare @dbname varchar(50)
set @dbname='数据库名称'
declare @sql varchar(50)
declare cs_result cursor local for select 'kill '+cast(spid as varchar(50)) from sys.sysprocesses where db_name(dbid)=@dbname
open cs_result
fetch next from cs_result into @sql
while @@fetch_status=0
begin
execute(@sql)
fetch next from cs_result into @sql
end
close cs_result
deallocate cs_result
该SQL语句利用游标循环所有正在使用该数据库的进程,并通过kill命令杀死进程。

3,利用SQL语句,断开所有用户链接,并回滚所有事务,具体SQL语句如下:
代码如下:
ALTER DATABASE [数据库名称]
SET OFFLINE WITH ROLLBACK IMMEDIATE

注意:在使用方法2与3时,不要在需要的还原的数据库下执行,建议在master数据库下面执行。

11、不允许保存更改,阻止保存要求重新创建表的更改

在SQL Server Management Studio点击菜单【工具】 - 【选项】,
打开【选项】对话框,展开【Designers】,取消【阻止保存要求重新创建表的更改】复选框

12、配置SQL代理作业,执行存储过程调用链接服务器,提示“ 对远程服务器的访问遭拒绝,因为不存在登录映射。”

在链接服务器,右键“属性” - “安全性” - 增加用户"NT AUTHORITY\NETWORK SERVICE" - 输入链接服务器的sa账号和密码

13、查询所有的表、视图、触发器、存储过程

select * from sysobjects where xtype='TR' order by name --所有触发器
select * from sysobjects where xtype='P' order by name --所有存储过程
select * from sysobjects where xtype='V' order by name --所有视图
select * from sysobjects where xtype='U' order by name --所有表

转:https://www.cnblogs.com/star-studio/archive/2011/07/19/2110372.html



推荐阅读
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 本文介绍了一种使用 JavaScript 计算两个日期之间时间差的方法。该方法支持多种时间格式,并能返回秒、分钟、小时和天数等不同精度的时间差。 ... [详细]
  • 单片微机原理P3:80C51外部拓展系统
      外部拓展其实是个相对来说很好玩的章节,可以真正开始用单片机写程序了,比较重要的是外部存储器拓展,81C55拓展,矩阵键盘,动态显示,DAC和ADC。0.IO接口电路概念与存 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 2022年7月20日:关键数据与市场动态分析
    2022年7月20日,本文对当日的关键数据和市场动态进行了深入分析。主要内容包括:1. 关键数据的解读与趋势分析;2. 市场动态的变化及其对投资策略的影响;3. 相关经济指标的评估。通过这些分析,帮助读者更好地理解当前市场环境,为决策提供参考。 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • 如何使用 `org.eclipse.rdf4j.query.impl.MapBindingSet.getValue()` 方法及其代码示例详解 ... [详细]
  • 本文总结了JavaScript的核心知识点和实用技巧,涵盖了变量声明、DOM操作、事件处理等重要方面。例如,通过`event.srcElement`获取触发事件的元素,并使用`alert`显示其HTML结构;利用`innerText`和`innerHTML`属性分别设置和获取文本内容及HTML内容。此外,还介绍了如何在表单中动态生成和操作``元素,以便更好地处理用户输入。这些技巧对于提升前端开发效率和代码质量具有重要意义。 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 当使用 `new` 表达式(即通过 `new` 动态创建对象)时,会发生两件事:首先,内存被分配用于存储新对象;其次,该对象的构造函数被调用以初始化对象。为了确保资源管理的一致性和避免内存泄漏,建议在使用 `new` 和 `delete` 时保持形式一致。例如,如果使用 `new[]` 分配数组,则应使用 `delete[]` 来释放内存;同样,如果使用 `new` 分配单个对象,则应使用 `delete` 来释放内存。这种一致性有助于防止常见的编程错误,提高代码的健壮性和可维护性。 ... [详细]
  • MyISAM和InnoDB是MySQL中最为广泛使用的两种存储引擎,每种引擎都有其独特的优势和适用场景。MyISAM引擎以其简单的结构和高效的读取速度著称,适用于以读操作为主、对事务支持要求不高的应用。而InnoDB引擎则以其强大的事务处理能力和行级锁定机制,在需要高并发写操作和数据完整性的场景下表现出色。选择合适的存储引擎应综合考虑业务需求、性能要求和数据一致性等因素。 ... [详细]
  • Java环境中Selenium Chrome驱动在大规模Web应用扩展时的性能限制分析 ... [详细]
  • 如何在MySQL中选择合适的表空间以优化性能和管理效率
    在MySQL中,合理选择表空间对于提升表的管理和访问性能至关重要。表空间作为MySQL中用于组织和管理数据的一种机制,能够显著影响数据库的运行效率和维护便利性。通过科学地配置和使用表空间,可以优化存储结构,提高查询速度,简化数据管理流程,从而全面提升系统的整体性能。 ... [详细]
  • 在Python多进程编程中,`multiprocessing`模块是不可或缺的工具。本文详细探讨了该模块在多进程管理中的核心原理,并通过实际代码示例进行了深入分析。文章不仅总结了常见的多进程编程技巧,还提供了解决常见问题的实用方法,帮助读者更好地理解和应用多进程编程技术。 ... [详细]
author-avatar
X婷婷Z
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有