zoukankan      html  css  js  c++  java
  • SQL中函数介绍

    SQL 中STUFF函数用法

    作用:  

      删除指定长度的字符,并在指定的起点处插入另一组字符。

    语法:

    STUFF ( character_expression , start , length ,character_expression )

    示例:

      以下示例在第一个字符串 abcdef 中删除从第 2 个位置(字符 b)开始的三个字符,然后在删除的起始位置插入第二个字符串,从而创建并返回一个字符串  

    参数:   

      character_expression:一个字符数据表达式。character_expression 可以是常量、变量,也可以是字符列或二进制数据列。

      start:一个整数值,指定删除和插入的开始位置。如果 start 或 length 为负,则返回空字符串。如果 start 比第一个 character_expression长,则返回空字符串。start 可以是 bigint 类型。

      length:一个整数,指定要删除的字符数。如果 length 比第一个 character_expression长,则最多删除到最后一个 character_expression 中的最后一个字符。length 可以是 bigint 类型。

    返回类型:  

      如果 character_expression 是受支持的字符数据类型,则返回字符数据。如果 character_expression 是一个受支持的 binary 数据类型,则返回二进制数据。

    备注:  

      如果结果值大于返回类型支持的最大值,则产生错误。

    SQL中 pwdencrypt 和 pwdcompare 用法

    pwdencrypt实现对输入数据进行加密后返回二进制形式的加密内容;同样密码加密后生成结果都是不同的,并且不可逆

    pwdcompare用于检查明文是否与加密的二进制数据内容相等,没有解密函数。

    这是两个SQLServer未公开的函数,主要是用于SQLServer内部自己调用。优点是调用方便,缺点是这二个函数没有公开,就意味着可能改变,并且不兼容原来的,在使用上存在风险。(只在sqlserver验证了一下)

    CREATE TABLE [dbo].[UserInfo]
    (
        [id] [int] NOT NULL IDENTITY(1, 1),
        [name] [varchar] (50),
        [pwd] [varbinary] (50) NULL
    ) 
    go
    
    insert into dbo.UserInfo values ('张三1', pwdencrypt('123456'))
    insert into dbo.UserInfo values ('张三2', pwdencrypt('123456'))
    insert into dbo.UserInfo values ('张三3', pwdencrypt('456456'))

    比较数据是否相等

    SQL中 varchar 和 Nvarchar 的区别

    Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示

    varchar(n)长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。

    nvarchar(n)包含 n 个字符的可变长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。字节的存储大小是所输入字符个数的两倍。

    示例:  

    1、字符串:我和coffee  

      那么varchar字段占2×2+6=10个字节的存储空间,而nvarchar字段占8×2=16个字节的存储空间。  

      如字段值只是英文可选择varchar,而字段值存在较多的双字节(中文、韩文等)字符时用nvarchar  

    2、varchar(10)与nvarchar(10)  

      前者是非unicode型,存储字符按1个算(内部空间存储占1字节),存储汉字的话按2个算,就是可以存10个字符或者5个汉字  

      后者是unicode型,存储什么都是按1个算(内部空间存储占2字节),是可以存10个字符或10个汉字  

      varchar(10)与nvarchar(10)就是分别占10个字节和20个字节

    SQL中 count(1)、count(*)与 count(列名) 的执行区别

    COUNT() 函数返回匹配指定条件的行数

    COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入):不包含值为NULL的记录

    COUNT(*) 函数返回表中的记录数:

    COUNT(DISTINCT column_name) 函数返回指定列的不同值的数目

    count(1) 和 count(字段)两者的主要区别是:

    (1) count(1) 会统计表中的所有的记录数,包含字段为null 的记录

    (2) count(字段) 会统计该字段在表中出现的次数,忽略字段为null 的情况。即不统计字段为null 的记录

    执行效率上:  

    1. 列名为主键,count(列名)会比count(1)快  
    2. 列名不为主键,count(1)会比count(列名)快  
    3. 如果表多个列并且没有主键,则 count(1) 的执行效率优于 count(*)  
    4. 如果有主键,则 select count(主键)的执行效率是最优的  
    5. 如果表只有一个字段,则 select count(*)最优

    Parameters.AddWithValue(“@参数”, value)方法

    以前用command方法执行存储过程增加参数时,总是先用cmd.Parameters.Add方法来设置参数和参数类型,再用Parameters[0].Value来给参数赋值。以前的一个动作代码示例:

     1             string strConn = "Data Source=.;Initial Catalog=HISDB;Integrated Security=True";
     2 
     3             using( SqlConnection conn = new SqlConnection(strConn))
     4             {
     5                 conn.Open();
     6 
     7                 SqlCommand cmd = new SqlCommand("AuditMessageInsert", conn);
     8                 //设置命令类型为存储过程,没有设置的话会执行失败
     9                 cmd.CommandType = CommandType.StoredProcedure;
    10 
    11                 //设置参数名和类型
    12                 cmd.Parameters.Add("@Target", SqlDbType.NChar);
    13                 cmd.Parameters.Add("@Description", SqlDbType.NChar);
    14                 cmd.Parameters.Add("@Actor", SqlDbType.NChar);
    15                 cmd.Parameters.Add("@Time", SqlDbType.DateTime);
    16                 cmd.Parameters.Add("@Computer", SqlDbType.NChar);
    17 
    18                 //给参数赋值
    19                 cmd.Parameters[0].Value = "ATarget";
    20                 cmd.Parameters[1].Value = "Description";
    21                 cmd.Parameters[2].Value = "Actor";
    22                 cmd.Parameters[3].Value = DateTime.Now;
    23                 cmd.Parameters[4].Value = "PC-Computer";
    24 
    25                 cmd.ExecuteNonQuery();
    26             }
    View Code

    如果用Parameters.AddWithValue方法就不用这么麻烦了,可以直接加参数名和其值,不用再设置参数的类型,示例代码:

     1             string strConn = "Data Source=.;Initial Catalog=HISDB;Integrated Security=True";
     2 
     3             using( SqlConnection conn = new SqlConnection(strConn))
     4             {
     5                 conn.Open();
     6 
     7                 SqlCommand cmd = new SqlCommand("AuditMessageInsert", conn);
     8                 cmd.CommandType = CommandType.StoredProcedure;
     9 
    10                 //增加参数:名称与类型 且与表中参数的顺序没关系
    11                 cmd.Parameters.AddWithValue("@Actor", "Actor");
    12                 cmd.Parameters.AddWithValue("@Target", "Target");
    13                 cmd.Parameters.AddWithValue("@Description", "Description");
    14                 cmd.Parameters.AddWithValue("@Computer", "Computer");
    15                 cmd.Parameters.AddWithValue("@Time", DateTime.Now);
    16 
    17                 cmd.ExecuteNonQuery();
    18             }    
    View Code

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    Vue项目中使用Vue-Quill-Editor富文本编辑器插件
    Element-UI中的Cascader 级联选择器高度以及位置问题
    Sublime中同一个文件进行分屏显示
    Oracle的clob数据类型
    查看Nginx版本号的几种方式
    华为路由器EasyNAT&NAT Server
    huawei路由器NAT配置
    15
    14
    13
  • 原文地址:https://www.cnblogs.com/zhaoyl9/p/13792967.html
Copyright © 2011-2022 走看看