zoukankan      html  css  js  c++  java
  • 小技巧

     
     

    1.Float 转 varchar


    前两天选择一个FLOAT型的字段,要转换为VARCHAR,可是小数点后面的都自动被删去了。。。后查得可以通过如下转换获得:

    SELECT CAST(CAST(字段 AS DECIMAL(20,7)) AS VARCHAR(20)) FROM 要查的表
    或者

    SELECT CONVERT(VARCHAR(20),CONVERT(DECIMAL(20,7),字段)) FROM 要查的表

    2.isdate 日起判断函数与nullif 前者等于后者则赋值 为null 连用

    isdate(nullif([BadDebtTransferDate],''))=0 
     
    SELECT COUNT(*) FROM dbo.[_rawATB]
    WHERE
    ISDATE(nullif([BadDebtTransferDate],''))=0
    AND
    BadDebtTransferDate!=0 and BadDebtTransferDate != ''

    3.用法新颖的values

    select i from  ( values(1),(2),(3),(4),(5),(6)) t(i)
    4.获取某月最后一天日期(到底是30 还是31)此算法实际上是前一个月加一个月再减去一天
    DECLARE @PostDateID INT
    set @PostDateID = (select cast(convert(varchar,
    (select DATEADD(mm,-1,PostDate) from dbo.logImportInfo where ID =(select top 1 ImportInfo_ID from dbo.cvtTXNS_CHGS)),112) as int)/100)
    PRINT @PostDateID
    SELECT DATEADD(DAY,-1,DATEADD(mm,1,CAST(CAST(@PostDateID AS VARCHAR(20) )+'01' AS DATE)))
     
    SELECT CAST(CONVERT(VARCHAR(20),GETDATE(),112) AS DATE)
     
    DECLARE @PostDateID INT
    set @PostDateID = (select cast(convert(varchar,
    (select DATEADD(mm,-1,PostDate) from dbo.logImportInfo where ID =(select top 1 ImportInfo_ID from dbo.cvtTXNS_CHGS)),112) as int)/100)
    PRINT @PostDateID-----
    SELECT CAST(CAST(@PostDateID AS VARCHAR(20) )+'01' AS DATE),DATEADD(DAY,-1,DATEADD(mm,1,CAST(CAST(@PostDateID AS VARCHAR(20) )+'01' AS DATE)))
     

    5.运用系统表查询列名,该列数据类型名,允许的长度

     
    SELECT col.name,typ.name,typ.max_length FROM sys.all_columns col JOIN
         sys.types  typ ON col.system_type_id=typ.system_type_id
         WHERE col.object_id=object_id('cvtATB') AND col.name LIKE '%facility%'
    6.延时,定时技巧
    a.延时三秒执行
    waitfor delay '00:00:03'
          select * from DimAccount
    b.定时到这个时候执行
    测试着玩:
    alter  proc usp_intervalCall as
    waitfor time '19:14:01'
    execute usp_ParseXMLFile
    usp_intervalCall
     

    7.Goto , Try catch

     
    1.
    比方说某库中有N个存储过程:
    select name from sysobjects where xtype = 'P';

    name                                                                ------------------------------------------------------------------------------------------------------- 
    SO_updateorderdetail
    HR_ykf05p_calc
    GL_uninit_comp_acct_must
    ……
    ……
    (N row(s) affected)

    那幺如何在不用光标不用循环的情况下用T-SQL语句将这个数据库中的所有存储过程删除?

    2.
    有一个字符串:  a,bc,d,abce,ddz
    现在用T-SQL语句把这一字符串变成这种样子:
    item       
    ---------- 
    a
    bc
    d
    abce
    ddz

    (5 row(s) affected)

    (如果不用Cursor和循环,那幺有什幺好办法?)
     
    第1题:
    declare @v_sql varchar(8000)
    set @v_sql = ' '                -- 这一句是必须的.
    select @v_sql = @v_sql + ',' + name from sysobjects where xtype = 'P'
    set @v_sql = 'drop procdure ' + right(@v_sql,len(@v_sql)-1)--stuff(@v_sql,1,1,'')替换逗号
    print @v_sql
    --exec (@v_sql)                        -- 这一句注释打开的话你就会把当前库中所有的存储过程删掉.

    第2题:
    declare @str varchar(20),@strSql varchar(8000)
    set @str = 'a,bc,d,abce,ddz'        -- 此处的字符串可以随心所欲的更改
    if object_id('tempdb.dbo.#temp1') is null
            create table #temp1(item varchar(20))
    else
            truncate table #temp1
    SELECT @strSql='insert into #temp1 values('''+REPLACE(@str,',',''') 
    insert into #temp1 values(''')+''')'
    print @strSql
    exec (@strSql)
    select * from #temp1
     
    在使用 row_number() 时候加上 with (no lock)
    如果有来生,一个人去远行,看不同的风景,感受生命的活力。。。
  • 相关阅读:
    Idea中提交SVN或git时,忽略某些文件不提交
    SVN(subversion )服务端和客户端的下载安装使用
    layui官方文档
    使用IntelliJ IDEA配置Tomcat
    IntelliJ IDEA 配置JDK
    设置 IntelliJ IDEA 主题
    mybatis+mysql批量插入和批量更新
    session.资料
    MyEclipse2014.Maven自动更新
    Office.资料
  • 原文地址:https://www.cnblogs.com/Frank99/p/5951237.html
Copyright © 2011-2022 走看看