zoukankan      html  css  js  c++  java
  • SQL Server去重和判断是否为数字——OBJECT_ID的使用

    sql 语句查询时去掉重复项:

    使用 distinct 去掉重复项:

    首先可以明确的看到存在重复的名字,那么接下来就让我们试试使用 distinct 去重吧。

    1   select distinct * from Student

    咦,怎么没效果呢?原来,distinct 是根据所查询的字段去重的。* 表示所有的字段,可以明确的看到字段 S_Id 和 S_StuNo 是不可能有重复的,因为一个为主键和自增长的标识列,一个有 unique (唯一)的约束。

    既然明白了这一点,那下面就根据 S_Name,S_Sex,S_Height 这三个字段去重吧:

    1   select distinct S_Name,S_Sex,S_Height from Student

    sql判断字符串是否为数字:

    方法一: 使用sql server的内置函数 ISNUMERIC():

    1   select ISNUMERIC('123')        -- 返回 1 
    2   select ISNUMERIC('123.12')    -- 返回 1 
    3   select ISNUMERIC('a123.12')    -- 返回 0 
    4   select ISNUMERIC('abc')        -- 返回 0 

    函数 ISNUMERIC() 返回结果为 1 表示全是数字,结果为 0 表示有除了数字的其他字符,但是“.”(小数点也会被当做其中一部分)。

    方法二: 匹配字符串中是否存在除了数字之外的其他字符(小数点也算作其他字符)

    复制代码
     1 if(('123' not like '%[^0-9]%'))    -- 数字
     2 begin
     3     select '数字'
     4 end
     5 else
     6 begin
     7     select '非数字'
     8 end
     9 
    10 if(('a123' not like '%[^0-9]%'))    -- 非数字
    11 begin
    12     select '数字'
    13 end
    14 else
    15 begin
    16     select '非数字'
    17 end
    18 
    19 if(('123.1' not like '%[^0-9]%'))    -- 非数字
    20 begin
    21     select '数字'
    22 end
    23 else
    24 begin
    25     select '非数字'
    26 end
    复制代码

    当然,我们也可以根据这种方式,定义一个自定义函数,这个后面再说。

    sql 查询出某字段出现最多次数的值:

    1 -- 查询出表 Student 中名字(S_Name)出现次数最多的名字
    2   select top 1 S_Name,COUNT(1) from Student group by S_Name order by COUNT(1) desc

    sql server [case  when  then  else  end]:

    1 select S_StuNo 学号,S_Name 姓名,
    2 case S_Sex when '男' then '男生' when '女' then '女生' else '保密' end 性别,        -- 方式一
    3 case when S_Sex='男' then '男生' when S_Sex='女' then '女生' else '保密' end 性别,    -- 方式二
    4 S_Height 身高
    5 from Student

    sql OBJECT_ID、OBJECT_NAME、OBJECT_DEFINITION:

    复制代码
     1 if (OBJECT_ID('Student') is not null)    --判断是否存在 Student 这个表
     2 begin
     3     select '表已存在'
     4 end
     5 else
     6 begin
     7     select '表不存在,请创建'
     8 end
     9 
    10 --指定一个临时表名,则必须在临时表名前面加上数据库名,例如:
    11 IF OBJECT_ID('tempdb..#table1') is not null        --判断临时表 table1 是否存在,
    12 select '表已存在'
    13 else
    14 select '表不存在,请创建'
    15 
    16 select OBJECT_ID('Student')        -- 返回 245575913  根据对象名称返回对象ID 
    17 
    18 select OBJECT_NAME('245575913')        -- 返回 Student  根据对象ID返回对象名称
    19 
    20 select OBJECT_DEFINITION('245575913')    --返回对象的源文本
    21 
    22 select OBJECT_DEFINITION(OBJECT_ID('Student')) 
    复制代码
    示例,返回系统存储过程 sys.sp_columns 的定义:
    1 SELECT OBJECT_DEFINITION (OBJECT_ID(N'sys.sp_columns'));
    
    
    OBJECT_ID语法: OBJECT_ID ( '[ database_name . [ schema_name ] . | schema_name . ] object_name' [ ,'object_type' ] )
    参数:
    ' object_name ' (必填)
    是要使用的对象。 object_name是varchar或nvarchar。 如果object_name是varchar,它将隐式转换为nvarchar。 可以选择是否指定数据库和架构名称。
    ' object_type ' (可选)
    架构范围的对象类型。 object_type是varchar或nvarchar。 如果object_type是varchar,它将隐式转换为nvarchar。
    返回类型:
    return int
    PS:对于空间索引,OBJECT_ID 返回 NULL。出现错误时,返回 NULL。
    OBJECT_NAME语法: OBJECT_NAME ( object_id [, database_id ] ) 
    参数:
    ' object_id ' (必填)
    要使用的对象的 ID。 object_id是int ,假定在指定的数据库中,或在当前数据库上下文中为架构范围的对象。
    ' database_id '(可选)
    要在其中查找对象的数据库的 ID。 database_id是int。
    返回类型:
    return nvarchar(max)
    PS:出现错误时或调用方没有查看对象的权限时,将返回 NULL。 如果目标数据库的 AUTO_CLOSE 选项设置为 ON,则此函数将打开此数据库。
    用户只能查看符合如下条件的安全对象的元数据:该安全对象为该用户所有,或已授予该用户对该安全对象的权限。
    也就是说,如果用户对该对象没有任何权限,则那些会生成元数据的内置函数(如 OBJECT_NAME)可能返回 NULL。
    OBJECT_DEFINITION语法:OBJECT_DEFINITION ( object_id )
    参数:
    ' object_id ' (必填)
    要使用的对象的 ID。 object_id是int,和假定以表示当前的数据库上下文中的对象。
    返回类型:
    return nvarchar(max)
    PS:出现错误时或调用方没有查看对象的权限时,将返回 NULL。

    参考:
    https://msdn.microsoft.com/zh-cn/library/ms176090.aspx
  • 相关阅读:
    Python 读取Excel之xlrd篇
    Python读取文件基本方法
    Python 偏函数用法全方位解析
    如何表示只有一个元素的元祖
    Python对文本读写的操作方法【源码】
    jvm入门及理解(六)——垃圾回收与算法
    jvm入门及理解(五)——运行时数据区(虚拟机栈)
    jvm入门及理解(四)——运行时数据区(堆+方法区)
    jvm入门及理解(三)——运行时数据区(程序计数器+本地方法栈)
    jvm入门及理解(二)——类加载器子系统
  • 原文地址:https://www.cnblogs.com/asdyzh/p/9818729.html
Copyright © 2011-2022 走看看