Sql Server (时间戳2018/5/31 22:07:36 )

1.NULL的用法__2018-4-13

  • ISNULL()的用法
  • 注意SET ANSI_NULLS ON/OFF的区别;
  • 执行下面两句比较结果:
    SELECT  location,*FROM  mfsysproduct WHERE location IS NULL;
    SELECT  location,*FROM  mfsysproduct WHERE location = ‘‘;
    SELECT  location,* FROM mfsysproduct where location !=‘‘;
    SELECT  location,* FROM mfsysproduct WHERE ISNULL(location,‘‘)!=‘‘;

2.GROUP BY & HAVING

    SELECT nextevent,COUNT(1) FROM mfworkstatus WHERE workorderno NOT IN
    (SELECT workorderno FROM mfworkorder) GROUP BY nextevent;

    SELECT nextevent,COUNT(1) FROM mfworkstatus WHERE workorderno NOT IN
    (SELECT workorderno FROM mfworkorder) GROUP BY nextevent HAVING  COUNT(*)>100

3.SET QUOTED_IDENTIFIER off/on的区别

    SET QUOTED_IDENTIFIER ON
    SELECT * FROM "USER" WHERE a=‘netasp‘ 

    SET QUOTED_IDENTIFIER ON
    SELECT * FROM [USER] WHERE a=‘netasp‘ 

    SET QUOTED_IDENTIFIER OFF
    SELECT * FROM [USER]    WHERE a="netasp" s

    SET QUOTED_IDENTIFIER OFF
    SELECT * FROM [USER]    WHERE a= ‘netasp‘

当在数据库中新建一个名字是USER的表的时候,常常会带来一些麻烦,因为USER是SQL中的关键字,

但是上面的几个语句不会报错。再说一个概念:标示符是SQL中的中括号[]。

当SET QUOTED_IDENTIFIER值为ON时,双引号内的字符被当作是数据库对象。

就是说双引号""和标识符[]效果是一样样的,他们都表示引用的字符是数据库对象。单引号‘表示字符串的边界。

当SET QUOTDE_IDENTIFIER OFF时双引号被解释为字符串的边界,和单引号的作用是类似的。

就是说双引号"不能当做标识符使用,但是可以当做字符边界,和单引号‘的效果是一样样的。

可以做一个总结:当SET QUOTED_IDENTIFIER ON " "等同于[ ] 表示数据库对象;

当SET QUOTED_IDENTIFIER OFF " "等同于‘ ‘表示字符串边界;

还有这里的双引号" 并不是两个单引号‘合起来的,是shift+”打出来的,初学者可能会犯这样的错误。

4.CHARINDEX和substring的用法

SELECT TOP 5 Areatype,CHARINDEX(‘itpacking‘,AreaType,2) FROM sfctemparea WHERE CHARINDEX(‘waitpacking‘,AreaType)>0 ;

SELECT TOP 5 charindex(‘-‘,AreaType) FROM SfcTempArea WHERE CHARINDEX(‘waitpacking‘,AreaType)>0 ;

select top 5 CHARINDEX(‘-‘,AreaType)+1,len(AreaType) as [Last Name] from SfcTempArea WHERE CHARINDEX(‘waitpacking‘,AreaType)>0 ;

select top 5 substring(AreaType,charindex(‘-‘,AreaType)+1,len(AreaType)) as [Last Name] from
SfcTempArea WHERE CHARINDEX(‘waitpacking‘,AreaType)>0 ;

5.ISNUMERIC,LEFT,RIGHT的用法

select ISNUMERIC(‘164‘)
select ISNUMERIC(LEFT(‘q2qqq222222‘,1))
select ISNUMERIC(RIGHT(‘q11q1‘,2))

6.关于sql中constraint 前缀的用意(PK、UK、DF、CK、FK)

  1. 主键

    constraint PK_字段 primary key(字段),

  2. 唯一约束

    constraint UK_字段 unique key(字段),

  3. 默认约束

    constrint DF_字段 default(‘默认值‘) for 字段,

  4. 检查约束

    constraint CK_字段 check(约束。如:len(字段)>1),

  5. 主外键关系

    constraint FK_主表_从表 foreign(外键字段) references 主表(主表主键字段)

7.查询数据库中的所有触发器

select name from sysobjects where xtype=‘TR‘ --所有触发器
select name from sysobjects where xtype=‘P‘ --所有存储过程
select name from sysobjects where xtype=‘V‘ --所有视图
select name from sysobjects where xtype=‘U‘ --所有表
//以上为SqlServer用法  

Select object_name From user_objects Where object_type=‘TRIGGER‘;  --所有触发器
Select object_name From user_objects Where object_type=‘PROCEDURE‘;  --所有存储过程
Select object_name From user_objects Where object_type=‘VIEW‘;  --所有视图
Select object_name From user_objects Where object_type=‘TABLE‘; --所有表
Select object_name From user_objects Where object_type=‘SEQUENCE‘; --序列
//以上为Oracle用法 

8.触发器查询数据库中数据更新

if not exists(select 1 from deleted d join inserted i on d.ID=i.ID
and d.col1=1 and i.col1=2)
//if not exists 如果不存在
//(..)这里该是验证更新,更新前的id等于更新后的id,并且更新前col的值是1,更新后的值是2

9.存储过程代码片段之RAISERROR

RAISERROR (
            N‘This is message %s %d.‘,   -- Message text,
            10,                          -- Severity,
            1,                           -- State,
            N‘number‘,                   -- First argument.
            5                            -- Second argument.
           ); 

--The message text returned is: This is message number 5.

--Severity, 用户定义的与该消息关联的严重级别。(这个很重要)
   任何用户都可以指定 0 到 18 之间的严重级别。
   [0,10]的闭区间内,不会跳到catch;
   如果是[11,19],则跳到catch;
   如果[20,无穷),则直接终止数据库连接; 

--State, 如果在多个位置引发相同的用户定义错误,
        则针对每个位置使用唯一的状态号有助于找到引发错误的代码段。
        介于 1 至 127 之间的任意整数。(state 默认值为1)

IF @type = ‘MESUser‘  --MES登录账号检测
            BEGIN
                IF EXISTS ( SELECT  *
                            FROM    EUSER (nolock)
                            WHERE   LOGONNAME = @parameter1
                                    AND [DISABLED] = ‘1‘ )
                    BEGIN
                        SET @errorstr = N‘该账号已经被注销,请确认!‘
                        RAISERROR(@errorstr,16,1)
                        RETURN 101
                    END
                SELECT  @EXPIREDATE = [EXPIREDATE]
                FROM    EUSER (nolock)
                WHERE   LOGONNAME = @parameter1
                IF @EXPIREDATE < GETDATE()
                    BEGIN
                        SET @errorstr = N‘该账号使用期限已到,请确认!‘
                        RAISERROR(@errorstr,16,1)
                        RETURN 101
                    END
                --IF EXISTS ( SELECT  *
                --            FROM    EUSER
                --            WHERE   LOGONNAME = @parameter1  [email protected]账号
                --                    AND [PASSWORD] = @parameter2 )  [email protected]密码
                --    BEGIN
                IF NOT EXISTS ( SELECT  *
                                FROM    mfstationuser
                                WHERE   logonname = @parameter1 )
                    BEGIN
                        SET @errorstr = N‘该账号没有具有使用MES的权限,请确认!来自数据库表:mfstationuser‘
                        RAISERROR(@errorstr,16,1)
                        RETURN 101
                    END
                ELSE
                    BEGIN
                        SELECT  *
                        FROM    EUSER
                        WHERE   LOGONNAME = @parameter1
                    END

                --    END
                --ELSE
                --    BEGIN
                --        SET @errorstr = N‘账号或密码错误,请检查!‘
                --        RAISERROR(@errorstr,16,1)
                --        RETURN 101

                --    END
            END

10.SQL service日期,时间计算

时间戳 2018/5/31 14:01:53

--往前/后计算日期(YY\MM\DD)
SELECT CONVERT (VARCHAR(30), DATEADD(MM,-1, GETDATE()), 23)   //这个
--结果2018-04-30

SELECT CONVERT(VARCHAR(10),GETDATE(),112),CONVERT(VARCHAR(10),GETDATE(),120)
--结果20180521  2018-05-21

SELECT GETDATE()
--2018-05-31 16:22:06.233
SELECT CONVERT (VARCHAR(30), DATEADD(dd,-1, GETDATE()), 23)
--2018-05-30
SELECT CONVERT (VARCHAR(30), GETDATE(),120)
--2018-05-31 16:37:13
SELECT CONVERT (VARCHAR(30), GETDATE(),23)     //***这个
--2018-05-31
SELECT CONVERT (VARCHAR(10), GETDATE(),120)
--2018-05-31

原文地址:https://www.cnblogs.com/wayne05/p/9119285.html

时间: 2024-07-31 19:12:46

Sql Server (时间戳2018/5/31 22:07:36 )的相关文章

sql server时间戳timestamp

sql server时间戳timestamp 在SQL Server中联机丛书是这样说的: SQL Server timestamp 数据类型与时间和日期无关.SQL Server timestamp 是二进制数字,它表明数据库中数据修改发生的相对顺序.实现 timestamp 数据类型最初是为了支持 SQL Server 恢复算法.每次修改页时,都会使用当前的 @@DBTS 值对其做一次标记,然后 @@DBTS 加1.这样做足以帮助恢复过程确定页修改的相对次序,但是 timestamp 值与时

SQL SERVER 2008查看sql执行的时间

set statistics profile onset statistics io onset statistics time ongo<这里写上你的语句...>goset statistics profile offset statistics io offset statistics time off 在下面的消息中会显示: SQL Server 分析和编译时间: CPU 时间 = 0 毫秒,占用时间 = 0 毫秒. (1000 行受影响)表 'memberlevelglide'.扫描计

数据库触发器DB2和SQL Server的异同

大部分数据库语句的基本语法是相同的,但具体要具体的每一种数据库,又有些不一样,例如触发器,DB2和SQL Server两种很大的不同. 例如DB2的一个触发器: CREATE TRIGGER EAS.trName NO CASCADE BEFORE insert //插入触发器 ON eas.T_user REFERENCING NEW AS N_ROW //把新插入的数据命名为N_ROW FOR EACH ROW MODE DB2SQL //每一行插入数据都出发此操作 BEGIN ATOMIC

delphi连接sql server的字符串2011-10-11 16:07

delphi连接sql server的字符串2011-10-11 16:07 一.delphi连接sql server 放一个连接组件 ADOConnection, 其它组件TADODataSet,TADOQuery等的connection指向ADOConnection就可以了. 你可以双击ADOConnection,使用它的向导.也可以使用下面的代码 function OpenADOConn:boolean; begin result:=false; try with ADOConnectio

SQL Server 2012笔记分享-22:理解备份模式与恢复模式

SQL Server 备份和还原组件为保护存储在 SQL Server 数据库中的关键数据提供了基本安全保障. 为了最大限度地降低灾难性数据丢失的风险,您需要定期备份数据库以保留对数据所做的修改. 规划良好的备份和还原策略有助于防止SQL Server 2012笔记分享-22:理解备份模式与恢复模式数据库因各种故障而造成数据丢失. 通过还原一组备份,然后恢复数据库来测试您的策略,以便为有效地应对灾难做好准备. ===========================================

SQL Server 触发器 转http://www.cnblogs.com/hoojo/archive/2011/07/20/2111316.html

SQL Server 触发器 触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件进行触发被自动调用执行的.而存储过程可以通过存储过程的名称被调用. Ø 什么是触发器 触发器对表进行插入.更新.删除的时候会自动执行的特殊存储过程.触发器一般用在check约束更加复杂的约束上面.触发器和普通的存储过程的区别是:触 发器是当对某一个表进行操作.诸如:update.insert.delete这些操作的时候,系统会自动调用执行该表上对应的触发器.SQL Server 2

sql server中的TimeStamp时间戳与UniqueIdentifier数据类型

TimeStamp SQL Server timestamp 数据类型与时间和日期无关.SQL Server timestamp 是二进制数字,它表明数据库中数据修改发生的相对顺序.实现 timestamp 数据类型最初是为了支持 SQL Server 恢复算法.每次修改页时,都会使用当前的 @@DBTS 值对其做一次标记,然后 @@DBTS 加1.这样做足以帮助恢复过程确定页修改的相对次序,但是 timestamp 值与时间没有任何关系. 每个数据库都有一个计数器,当对数据库中包含 times

22. SQL -- SQL Server 2005 和SQL Server 2008新特性

SQL SERVER 2005 与SQL SERVER 2008 新特性   SQLSERVER 2005 新特性 Enhanced Data Types:存储最大8K-2G Partitioned Table(分区表):数据拆分管理 背景:一个公司,有目前现存数据以及历史数据,各在一台SER 上,服务器访问方式: SQL 2000 TABLE 1:在一张table 中,对数据进行分区 Enhanced Indexing Features SER 1 SER 2 现存数据 TABLE 1 TAB

Step6:SQL Server 数据变更时间戳(timestamp)在复制中的运用

一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 方案(Solution) 方案一(Solution One) 方案二(Solution Two) 方案三(Solution Three) 实现过程(Process) 注意事项(Attention) 参考文献(References) 二.背景(Contexts) SQL Server数据库中Basic与Group两个表需要提供部分字段给其它程序读取,程序把这两个表的数据缓存到内存中,但是程序想