SQL Server去重和判斷是否為數字——OBJECT_ID的使用
阿新 • • 發佈:2018-10-19
當前 max table tool sys isn 數據 toolbar tro
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
SQL Server去重和判斷是否為數字——OBJECT_ID的使用