<kbd id="5sdj3"></kbd>
<th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>

    我SQL常用腳本整理(下)

    共 3976字,需瀏覽 8分鐘

     ·

    2021-10-30 09:06

    SQL專欄

    3000字!5大SQL數(shù)據(jù)清洗方法!
    注意!SQL中的NULL

    我是寶器,之前已經(jīng)分享了一部分內(nèi)容我的SQL常用腳本!

    接上一章我們繼續(xù)分享一些簡單并且比較實用的SQL腳本


    11、SQL中的相除

    方法一

    --SQL中的相除
    SELECT
    CASE WHEN ISNULL(A-B,0)=0 THEN ''
    ELSE CAST(CONVERT(DECIMAL(18,2),A*100.0/(A-B)) AS VARCHAR(10))+'%' ?
    END AS '百分?jǐn)?shù)'? --FROM 表

    這里我們先要判斷被除數(shù)是否為0,如果為0給出一個想輸出的結(jié)果,這里我們返回空白(是字符類型,不是NULL),在不為0的時候就給出具體的計算公式,然后轉(zhuǎn)換成字符類型再和“%”進行拼接。例如:

    SELECT 
    CASE WHEN ISNULL(5-2,0)=0 THEN ''
    ELSE CAST(CONVERT(DECIMAL(18,2),5*100.0/(5-2)) AS VARCHAR(10))+'%' ?
    END AS '百分?jǐn)?shù)'? --FROM 表

    返回的結(jié)果:


    方法二

    SELECT 
    (CONVERT(VARCHAR(20),ROUND(41*100.0/88,3))+'%') AS '百分比'
    --FROM A

    執(zhí)行結(jié)果:



    12、四舍五入ROUND函數(shù)

    ROUND?(?numeric_expression?,?length?[?,function?]?)
    function 必須為 tinyint、smallint ?或 int。
    如果省略 function 或其值為?0(默認(rèn)值),則將舍入 numeric_expression。
    如果指定了0以外的值,則將截斷 numeric_expression。

    SELECT ROUND(150.45648, 2);
    --保留小數(shù)點后兩位,需要四舍五入
    --結(jié)果:
    150.46000

    SELECT ROUND(150.45648, 2, 0);
    --保留小數(shù)點后兩位,0為默認(rèn)值,表示進行四舍五入
    --結(jié)果:
    150.46000

    SELECT ROUND(150.45648, 2, 1);
    --保留小數(shù)點后兩位,不需要四舍五入,這里除0以外都是有同樣的效果,
    --與Oracle的TRUNC函數(shù)效果相同

    --結(jié)果:
    150.45000

    SELECT ROUND(150.45648, 2, 2);
    --保留小數(shù)點后兩位,不需要四舍五入,這里除0以外都是有同樣的效果,
    --與Oracle的TRUNC函數(shù)效果相同

    --結(jié)果:
    150.45000

    (提示:可以左右滑動代碼)



    13、對字段出現(xiàn)NULL值的處理

    方法一

    --CASE
    SELECT
    CASE WHEN ?'字段名' IS NULL THEN 'NULL'
    ELSE CONVERT(VARCHAR(20),'字段名1') END
    AS 'NewName'
    --結(jié)果:
    字段名1

    SELECT CASE WHEN NULL IS NULL THEN 'N'
    ELSE CONVERT(VARCHAR(20),NULL) END
    AS 'NewName'
    --結(jié)果:
    N


    方法二

    --SQL Server 2005:COALESCE
    SELECT COALESCE('字符串類型字段','N') AS 'NewName'
    --結(jié)果:
    字符串類型字段

    SELECT COALESCE(CONVERT(VARCHAR(20),'非字符串類型字段'),'N') AS 'NewName'
    --結(jié)果:
    非字符串類型字段

    SELECT COALESCE(CONVERT(VARCHAR(20),NULL),'N') AS 'NewName'
    --結(jié)果:
    N

    --COALESCE,返回其參數(shù)中的第一個非空表達(dá)式
    SELECT COALESCE(NULL,NULL,1,2,NULL)
    --結(jié)果:
    1

    SELECT COALESCE(NULL,11,12,13,NULL)
    --結(jié)果:
    11

    SELECT COALESCE(111,112,113,114,NULL)
    --結(jié)果:
    111



    14、COUNT的幾種情況

    --以下三種方法均可統(tǒng)計出表的記錄數(shù)
    --第一種
    select count(*) from tablename

    --第二種
    select count(ID) from tablename

    --第三種,1換成其它值也是可以的
    select count(1) from tablename



    15、UNION ALL多表插入

    把兩個相同結(jié)構(gòu)的表union后插入到一個新表中,
    當(dāng)然兩個以上的相同結(jié)構(gòu)的表也是可以的,
    這里的相同是指兩個或多個表的列數(shù)和每個對應(yīng)列的類型相同,
    列名稱可以不同

    select *
    into table_new
    from table_1
    union all
    select * from table_2



    16、查看數(shù)據(jù)庫緩存的SQL

    use master
    declare @dbid int
    Select @dbid = dbid from sysdatabases
    where name = 'SQL_ROAD'--修改成數(shù)據(jù)庫的名稱

    select
    dbid,UseCounts ,RefCounts,CacheObjtype,ObjType,
    DB_Name(dbid) as DatabaseName,SQL
    from syscacheobjects
    where dbid=@dbid
    order by dbid,useCounts desc,objtype

    我們可以看到數(shù)據(jù)庫中當(dāng)前正在運行的SQL有哪些



    17、刪除計劃緩存

    --刪除整個數(shù)據(jù)庫的計劃緩存
    DBCC FREEPROCCACHE

    --刪除某個數(shù)據(jù)庫的計劃緩存
    USE master
    DECLARE @dbid INT
    SELECT @dbid=dbid FROM sysdatabases WHERE NAME = 'SQL_ROAD'
    DBCC FLUSHPROCINDB (@dbid)


    18、SQL換行
    SQL的換行
    制表符 CHAR(9)
    換行符 CHAR(10)
    回車 CHAR(13)
    PRINT 'SQL'+CHAR(13)+'ROAD'
    PRINT 'SQL'+CHAR(10)+'ROAD'
    PRINT 'SQL'+CHAR(9)+'ROAD'
    執(zhí)行結(jié)果:


    如果將查詢結(jié)果以文本格式顯示,而不是網(wǎng)格格式顯示,SELECT語句也適用,我們先將查詢結(jié)果改成以文本格式顯示


    --以文本格式顯示結(jié)果
    SELECT 'SQL'+ CHAR(10)+'ROAD'
    SELECT 'SQL'+ CHAR(13)+'ROAD'
    SELECT 'SQL' + CHAR(10) + CHAR(13) + 'ROAD'

    結(jié)果如下:



    19、TRUNCATE 與 DELETE

    TRUNCATE 是SQL中的一個刪除數(shù)據(jù)表內(nèi)容的語句,用法是:

    TRUNCATE TABLE [Table Name] 速度快,而且效率高,因為:?
    TRUNCATE TABLE 在功能上與不帶 WHERE 子句的 DELETE 語句相同:二者均刪除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系統(tǒng)和事務(wù)日志資源少。?
    DELETE 語句每次刪除一行,并在事務(wù)日志中為所刪除的每行記錄一項。TRUNCATE TABLE 通過釋放存儲表數(shù)據(jù)所用的數(shù)據(jù)頁來刪除數(shù)據(jù),并且只在事務(wù)日志中記錄頁的釋放。?
    TRUNCATE TABLE 刪除表中的所有行,但表結(jié)構(gòu)及其列、約束、索引等保持不變。新行標(biāo)識所用的計數(shù)值重置為該列的種子。

    如果想保留標(biāo)識計數(shù)值,請改用 DELETE。

    如果要刪除表定義及其數(shù)據(jù),請使用 DROP TABLE 語句。?
    對于由 FOREIGN KEY 約束引用的表,不能使用 TRUNCATE TABLE,而應(yīng)使用不帶 WHERE 子句的 DELETE 語句。由于 TRUNCATE TABLE 不記錄在日志中,所以它不能激活觸發(fā)器。TRUNCATE TABLE 不能用于參與了索引視圖的表。?



    20、常用系統(tǒng)檢測腳本

    --查看內(nèi)存狀態(tài)
    dbcc memorystatus

    --查看哪個引起的阻塞,blk
    EXEC sp_who active

    --查看鎖住了那個資源id,objid
    EXEC sp_lock

    還有如何查看查詢分析器的SPID,可以在查詢分析器的狀態(tài)欄看到,比如sa(57),這就表示當(dāng)前查詢分析器SPID為57,這樣在使用profile的時候就可以指定當(dāng)前窗體進行監(jiān)控。狀態(tài)欄在查詢窗口的右下角。



    21、獲取腳本的執(zhí)行時間

    declare @timediff datetime
    select @timediff=getdate()
    select * from Suppliers
    print '耗時:'+ convert(varchar(10),datediff(ms,@timediff,getdate()))

    結(jié)果如下:

    在狀態(tài)欄是不會精確到毫秒的,只能精確到秒

    這個腳本可以更加有效的查看SQL代碼的執(zhí)行效率。


    以上就是今天分享給大家一些比較實用的SQL腳本,以后想到了其他內(nèi)容再分享給大家,好東西記得分享轉(zhuǎn)發(fā)呀~

    ·················END·················

    推薦閱讀

    1. 我在字節(jié)做了哪些事

    2. 寫給所有數(shù)據(jù)人。

    3. 從留存率業(yè)務(wù)案例談0-1的數(shù)據(jù)指標(biāo)體系

    4. 數(shù)據(jù)分析師的一周

    5. 超級菜鳥如何入門數(shù)據(jù)分析?


    歡迎長按掃碼關(guān)注「數(shù)據(jù)管道」

    瀏覽 72
    點贊
    評論
    收藏
    分享

    手機掃一掃分享

    分享
    舉報
    評論
    圖片
    表情
    推薦
    點贊
    評論
    收藏
    分享

    手機掃一掃分享

    分享
    舉報

    <kbd id="5sdj3"></kbd>
    <th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>
    亚洲偷拍22 | 国产精品人妻无码八区牛牛 | 影音先锋麻豆电影 | 青青无码免费播放网址 | a在线日本免费观看 |