- 時間格式化
select convert(date,'2016.08.09',23) ; -- 格式化結果:2016-08-09
convert(varchar(100),CONVERT(date, '2016-5-16', 23),111)
select convert(varchar(100),CONVERT(date, '2016-5-16', 23),111); -- 格式化結果:2016/05/16
select convert(date,'',23) ; -- 格式化結果:1900-01-01
select convert(varchar(100),CONVERT(date, null, 23),111); -- 格式化結果: ''
select convert(varchar(100),GETDATE(),20);-- 格式化結果: '2016-08-17 13:30:27'
select dateadd(YYYY,1,getdate()); -- 格式化結果:加一年
select DateAdd(dd,-1,getdate()); -- 格式化結果:減一天
- 時間相減
select DATEDIFF(day,'2016-08-22 22:02:20.237',getDate()),
DATEDIFF(day,'2016-08-22','2016-08-25') 當天爲'2016-08-25',結果爲:3,3 #按天相減
select DATEDIFF(MINUTE, '2016-12-23 14:37:08', '2016-12-23 14:39:09'); 結果:3 #按分鐘相減
- 四捨五入
select cast(round(12.5,2) as numeric(5,2)); -- 12.50
select cast(round(12.555,2) as numeric(5,2)); -- 12.56
- 查看數據庫鏈接
sp_who:能夠看到鏈接用戶(hostname),登陸名(loginname),數據庫(dbname)
Select * from sys.dm_exec_connections; -- 能夠查看當前有多少人鏈接(client_net_address:鏈接用戶IP)
Select * from sys.dm_exec_connections where client_net_address = '192.168.0.151' -- 查看具體IP鏈接
Select * from sys.dm_exec_sessionswhere host_name = '計算機名'
-- 能夠看到有多少會話,一個鏈接能夠有多個會話
- 使用指定值替換空
isnull(area_max,9999) #當爲空時使用9999替換
- 查詢和關閉鎖表進程
select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName
from sys.dm_tran_locks where resource_type='OBJECT' -- 查看鎖表進程
-- 關閉鎖表進程
declare @spid int
Set @spid = 92 --鎖表進程
declare @sql varchar(1000)
set @sql='kill '+cast(@spid as varchar)
exec(@sql)
- 查詢當前執行SQL
SELECT [Spid] = session_id ,
ecid ,
[Database] = DB_NAME(sp.dbid) ,
[User] = nt_username ,
[Status] = er.status ,
[Wait] = wait_type ,
[Individual Query] = SUBSTRING(qt.text,
er.statement_start_offset / 2,
( CASE WHEN er.statement_end_offset = -1
THEN LEN(CONVERT(NVARCHAR(MAX), qt.text))
* 2
ELSE er.statement_end_offset
END - er.statement_start_offset )
/ 2) ,
[Parent Query] = qt.text ,
Program = program_name ,
hostname ,
nt_domain ,
start_time
FROM sys.dm_exec_requests er
INNER JOIN sys.sysprocesses sp ON er.session_id = sp.spid
CROSS APPLY sys.dm_exec_sql_text(er.sql_handle) AS qt
WHERE session_id > 50 -- Ignore system spids.
AND session_id NOT IN ( @@SPID ) -- Ignore this current statement.
ORDER BY 1,2
- 替換特殊字符
#替換回車符
REPLACE(detail, CHAR(13) , '<br>')
#替換換行符
REPLACE(detail, CHAR(10), '<br>')
#替換回車換行符
REPLACE(detail, CHAR(13) + CHAR(10), '<br>')
- 查詢最大鏈接數
SELECT @@MAX_CONNECTIONS
- 查詢每一個數據的鏈接數
SELECT name ,count(*) FROM (
SELECT b.name,a.* FROM [Master].[dbo].[SYSPROCESSES] a
INNER JOIN [Master].[dbo].[SYSDATABASES] b
ON a.dbid=b.dbid
)t
GROUP BY t.name
- 查詢線程來源
select * from master..sysprocesses
spid--SQL Server進程的ID。
kpid--Microsoft Windows線程的ID。
dbid--當前正由進程使用的數據庫ID。
dbcc inputbuffer(spid) -- 查看正在執行的SQL
sp_who spid; --查看錶名
- 找出執行時間最長的SQL
-- 全部SQL
SELECT top 10
(total_elapsed_time / execution_count)/1000 N'平均時間ms'
,total_elapsed_time/1000 N'總花費時間ms'
,total_worker_time/1000 N'所用的CPU總時間ms'
,total_physical_reads N'物理讀取總次數'
,total_logical_reads/execution_count N'每次邏輯讀次數'
,total_logical_reads N'邏輯讀取總次數'
,total_logical_writes N'邏輯寫入總次數'
,execution_count N'執行次數'
,creation_time N'語句編譯時間'
,last_execution_time N'上次執行時間'
,SUBSTRING(
st.text,
(qs.statement_start_offset/2) + 1,
(
(CASE statement_end_offset WHEN -1 THEN DATALENGTH(st.text) ELSE qs.statement_end_offset END - qs.statement_start_offset)/2
) + 1
) N'執行語句'
,qp.query_plan
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
WHERE
SUBSTRING(
st.text,
(qs.statement_start_offset/2) + 1,
(
(CASE statement_end_offset WHEN -1 THEN DATALENGTH(st.text) ELSE qs.statement_end_offset END - qs.statement_start_offset)/2
) + 1
) not like '%fetch%'
ORDER BY total_elapsed_time / execution_count DESC;
-- 指定包含 表名的SQL
SELECT top 10
(total_elapsed_time / execution_count)/1000 N'平均時間ms'
,total_elapsed_time/1000 N'總花費時間ms'
,total_worker_time/1000 N'所用的CPU總時間ms'
,total_physical_reads N'物理讀取總次數'
,total_logical_reads/execution_count N'每次邏輯讀次數'
,total_logical_reads N'邏輯讀取總次數'
,total_logical_writes N'邏輯寫入總次數'
,execution_count N'執行次數'
,creation_time N'語句編譯時間'
,last_execution_time N'上次執行時間'
,SUBSTRING(
st.text,
(qs.statement_start_offset/2) + 1,
(
(CASE statement_end_offset WHEN -1 THEN DATALENGTH(st.text) ELSE qs.statement_end_offset END - qs.statement_start_offset)/2
) + 1
) N'執行語句'
,qp.query_plan
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
WHERE
SUBSTRING(
st.text,
(qs.statement_start_offset/2) + 1,
(
(CASE statement_end_offset WHEN -1 THEN DATALENGTH(st.text) ELSE qs.statement_end_offset END - qs.statement_start_offset)/2
) + 1
) like '%se_user%'
ORDER BY total_elapsed_time / execution_count DESC;