SQL Server去重和判断是否为数字

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‘)) 
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 intPS:对于空间索引,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。参见MSDN:https://msdn.microsoft.com/zh-cn/library/ms176090.aspx
时间: 2024-10-01 05:02:46

SQL Server去重和判断是否为数字的相关文章

SQL Server去重和判断是否为数字——OBJECT_ID的使用

sql 语句查询时去掉重复项: 使用 distinct 去掉重复项: 首先可以明确的看到存在重复的名字,那么接下来就让我们试试使用 distinct 去重吧. 1 select distinct * from Student 咦,怎么没效果呢?原来,distinct 是根据所查询的字段去重的.* 表示所有的字段,可以明确的看到字段 S_Id 和 S_StuNo 是不可能有重复的,因为一个为主键和自增长的标识列,一个有 unique (唯一)的约束. 既然明白了这一点,那下面就根据 S_Name,

sql server case when 判断为空

代码如下 select distinct G.* ,(select BUSINESS_NAME from BusinessInfo where BusinessInfo.BUSINESS_BID=G.G_BUSINESS_ID) as BUSINESS_NAME ,(select sum(StockGNum) from StockDetail where StockDetail.StockGID =G.G_ID) as StockGNum ,(select sum(StockRemovalGNu

sql server 2000/2005 判断存储过程、触发器、视图是否存在并删除

1.判断是否存在addOneArticle这个存储过程  if Exists(select name from sysobjects where NAME = 'addOneArticle' and type='P') drop procedure addOneArticle 2.判断是否存在countAr这个触发器  if exists(select * from dbo.sysobjects where id = object_id(N'[dbo].[countAr]') and OBJEC

sql server 查询数据判断为空

select * from info where typeid= 1 and xxx is NOT null select * from info where typeid= 1 and xxx is null

在Sql Server触发器中判断操作是Insert还是Update还是Delete

DECLARE     @IsInsert bit,     @IsUpdate bit,     @IsDelete bit IF EXISTS(SELECT 1 FROM inserted) AND NOT EXISTS(SELECT 1 FROM deleted)     SET @IsInsert = 1 ELSE     SET @IsInsert = 0 IF EXISTS(SELECT 1 FROM inserted) AND EXISTS(SELECT 1 FROM delete

Sql Server中判断表、列不存在则创建的方法[转]

一.Sql Server中如何判断表中某列是否存在 首先跟大家分享Sql Server中判断表中某列是否存在的两个方法,方法示例如下: 比如说要判断表A中的字段C是否存在两个方法: 第一种方法  ? 1 2 3 4 5 6 7 8 IF EXISTS (  SELECT 1 FROM SYSOBJECTS T1  INNER JOIN SYSCOLUMNS T2 ON T1.ID=T2.ID  WHERE T1.NAME='A' AND T2.NAME='C'  )  PRINT '存在'  E

SQL Server 索引 之 书签查找 <第十一篇>

一.书签查找的概念 书签可以帮助SQL Server快速从非聚集索引条目导向到对应的行,其实这东西几句话我就能说明白. 如果表有聚集索引(区段结构),那么书签就是从非聚集索引找到聚集索引后,利用聚集索引定位到数据.此处的书签就是聚集索引.如果表没有聚集索引(堆结构).那么扫描非聚集索引后,通过RID定位到数据,那么此处书签就是RID. 所谓的书签查找,就是通过聚集索引,然后利用聚集索引或RID定位到数据. 不论表示堆结构还是区段结构,数据的存放都是数据库文件的某文件->某页->某行,因此定位数

sql server 索引总结三

一.非聚集索引维护 非聚集索引的行定位器值保持相同的聚集索引值,即使该聚集索引列物理上重新定位后,也是如此. 为了优化这个维护开销,SQL Server添加一个指向旧数据页的指针,以在页面分割之后指向新的数据页面,而不是更新所有相关非聚集索引的行定位器.这样,虽然降低了非聚集索引的维护开销,但是增加了从非聚集索引行到数据行的导航开销,因为添加了一个旧数据页面和信数据页面之间的连接.因此,将聚集索引作为行定位器降低了非聚集索引相关的开销. 二.定义书签查找 当一个查询请求不是优化器选择的非聚集索引

Sql的一些常规判断

sql server中如何判断表或者数据库的存在,但在实际使用中,需判断Status状态位:其中某些状态位可由用户使用 sp_dboption(read only.dbo use only.single user 等)进行设置: 1 = autoclose:使用 sp_dboption 设置. 数据库完全关闭,其资源在最后一个用户注销后释放.4 = select into/bulkcopy:使用 sp_dboption 设置.允许使用 Select INTO 语句和快速大容量复制.8 = tru