美文网首页
sql_server

sql_server

作者: 终极蚂蚁 | 来源:发表于2019-03-22 11:30 被阅读0次
    • xml path
    select (select top 10 concat(',',id) from userInfo for XML path('') ) userinfo;
    
    • 随机取一条数据

      SELECT top 1 * FROM [Table name] where [Column name]=XX ORDER BY NEWID()

    • 获取主键id 名

    SELECT COLUMN_NAME colname FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME = ? AND constraint_name = ( SELECT B.NAME FROM SYSOBJECTS A JOIN SYSOBJECTS B ON A.ID = B.PARENT_OBJ AND A.XTYPE = 'U' AND B.XTYPE = 'PK' WHERE A.NAME = ? )
    
    -- 分页获取数据
    SELECT
      *
    FROM
      PAYORDER
    ORDER BY ID DESC OFFSET [count]*([page]-1) ROW FETCH NEXT [count] ROWS ONLY;
    
    • 分页_2(2005/2008 两个嵌套)
    SELECT
      *
    FROM
      (
        SELECT
          *, ROW_NUMBER () OVER (ORDER BY id DESC) row
          FROM
            PayOrder
      ) temp
    WHERE
      row BETWEEN 1
    AND 3;
    
    • 插入时返回主键id @@IDENTITY 一般系统定义的全局变量都是以@@开头的
    String sql = "insert into testUser (name,password) values (?,?);select @@IDENTITY";
    String sql = "insert into testUser (name,password) values (?,?);";
    PreparedStatement preparedStatement = conn.prepareStatement(sql,PreparedStatement.RETURN_GENERATED_KEYS);
    PreparedStatement preparedStatement = conn.prepareStatement(sql);
    
    • SQL server 保留两位小数
    SqlServer保留几位小数的两种做法
    
    
    数据库里的 float momey 类型,都会精确到多位小数.但有时候 我们不需要那么精确,例如,只精确到两位有效数字。
    
    解决:
    
    1. 使用 Round() 函数,如 Round(@num,2) 参数 2 表示 保留两位有效数字。
    
    2. 更好的方法是使用 Convert(decimal(18,2),@num) 实现转换,decimal(18,2) 指定要保留的有效数字。
    
    这两个方法有一点不同:使用 Round() 函数,如果 @num 是常数,如 Round(2.3344,2) 则 会在把有效数字后面的 变为0 ,成 2.3300。但 Convert() 函数就不会。
    
    select  Convert(decimal(18,0),2.36985);  -> 2
    select ROUND(2.3698595,0); -> 2.00000
    
    • 日期 和 时间

    获取当前时间

    Select GETDATE() as '当前日期',
    DateName(year,GetDate()) as '年',
    DateName(month,GetDate()) as '月',
    DateName(day,GetDate()) as '日',
    DateName(dw,GetDate()) as '星期',
    DateName(week,GetDate()) as '周数',
    DateName(hour,GetDate()) as '时',
    DateName(minute,GetDate()) as '分',
    DateName(second,GetDate()) as '秒'
    

    获取对应格式的时间

    SELECT CONVERT(varchar(100), GETDATE(), 0) 05  9 2011  9:12AM
    SELECT CONVERT(varchar(100), GETDATE(), 1) 05/09/11
    SELECT CONVERT(varchar(100), GETDATE(), 2) 11.05.09
    SELECT CONVERT(varchar(100), GETDATE(), 3) 09/05/11
    SELECT CONVERT(varchar(100), GETDATE(), 4) 09.05.11
    SELECT CONVERT(varchar(100), GETDATE(), 5) 09-05-11
    SELECT CONVERT(varchar(100), GETDATE(), 6) 09 05 11
    SELECT CONVERT(varchar(100), GETDATE(), 7) 05 09, 11
    SELECT CONVERT(varchar(100), GETDATE(), 8) 09:13:14
    SELECT CONVERT(varchar(100), GETDATE(), 9) 05  9 2011  9:13:14:670AM
    SELECT CONVERT(varchar(100), GETDATE(), 10) 05-09-11
    SELECT CONVERT(varchar(100), GETDATE(), 11) 11/05/09
    SELECT CONVERT(varchar(100), GETDATE(), 12) 110509
    SELECT CONVERT(varchar(100), GETDATE(), 13) 09 05 2011 09:13:14:670
    SELECT CONVERT(varchar(100), GETDATE(), 14) 09:13:14:670
    
    SELECT CONVERT(varchar(100), GETDATE(), 20) 2011-05-09 09:13:14
    SELECT CONVERT(varchar(100), GETDATE(), 21) 2011-05-09 09:13:14.670
    SELECT CONVERT(varchar(100), GETDATE(), 22) 05/09/11  9:15:33 AM
    SELECT CONVERT(varchar(100), GETDATE(), 23) 2011-05-09
    SELECT CONVERT(varchar(100), GETDATE(), 24) 09:15:33
    SELECT CONVERT(varchar(100), GETDATE(), 25) 2011-05-09 09:15:33.140
    
    SELECT CONVERT(varchar(100), GETDATE(), 100) 05  9 2011  9:15AM
    SELECT CONVERT(varchar(100), GETDATE(), 101) 05/09/2011
    SELECT CONVERT(varchar(100), GETDATE(), 102) 2011.05.09
    SELECT CONVERT(varchar(100), GETDATE(), 103) 09/05/2011
    SELECT CONVERT(varchar(100), GETDATE(), 104) 09.05.2011
    SELECT CONVERT(varchar(100), GETDATE(), 105) 09-05-2011
    SELECT CONVERT(varchar(100), GETDATE(), 106) 09 05 2011
    SELECT CONVERT(varchar(100), GETDATE(), 107) 05 09, 2011
    SELECT CONVERT(varchar(100), GETDATE(), 108) 09:16:38
    SELECT CONVERT(varchar(100), GETDATE(), 109) 05  9 2011  9:16:38:543AM
    SELECT CONVERT(varchar(100), GETDATE(), 110) 05-09-2011
    SELECT CONVERT(varchar(100), GETDATE(), 111) 2011/05/09
    SELECT CONVERT(varchar(100), GETDATE(), 112) 20110509
    SELECT CONVERT(varchar(100), GETDATE(), 113) 09 05 2011 09:17:19:857
    SELECT CONVERT(varchar(100), GETDATE(), 114) 09:17:19:857
    SELECT CONVERT(varchar(100), GETDATE(), 120) 2011-05-09 09:17:19
    SELECT CONVERT(varchar(100), GETDATE(), 121) 2011-05-09 09:17:19.857
    SELECT CONVERT(varchar(100), GETDATE(), 126) 2011-05-09T09:17:19.857
    SELECT CONVERT(varchar(100), GETDATE(), 130)  6 ????? ??????? 1432  9:17:19:857AM
    SELECT CONVERT(varchar(100), GETDATE(), 131)  6/06/1432  9:17:19:857AM
    
    SQL server获取昨天的时间
    
    -- 获取昨天的当前时间
        select dateadd(day, -1, getdate());
    -- 获取当前月
        select DATENAME(MM,GETDATE()) --05
        select DATENAME(MONTH,GETDATE()) --05
        select DATEPART(MM,GETDATE()) --5
        select DATEPART(MONTH,GETDATE()) --5
        select MONTH(GETDATE()) --5
    -- YEAR 年;YYYY 年;YY 年;
    -- QUARTER 季度;QQ 季度 ;Q 季度;
    -- MONTH 月(05);MM 月(05);M 月(05);
    -- WEEKDAY 星期几;DW 星期几;W 星期几;
    -- WEEK 一年的第几周;WK 一年的第几周;WW 一年的第几周;ISOWK 一年的第几周;ISOWW 一年的第几周;ISO_WEEK 一年的第几周;
    -- DAY 天;DD 天;D 天;
    -- DAYOFYEAR 一年的第几天;DY 一年的第几天;Y 一年的第几天;
    -- HOUR 小时;HH 小时;
    -- MINUTE 分钟;MI 分钟;N 分钟;
    -- SECOND 秒;SS 秒;S 秒;
    -- MCS 微秒(略);
    -- MICROSECOND 微秒(略);
    -- MILLISECOND 毫秒(略);
    -- MS 毫秒(略) ;
    -- NANOSECOND 十亿分之一秒(略);
    -- NS 十亿分之一秒(略);
    

    操作日期型数据和日期函数

    year(date)                      返回年份
    month(date)                     返回月份
    day(date)                     返回日数
    getdate()                        以sql规定的标准内部格式返回系统当前的日期和时间
    dateadd(datepart,number,date)   返回datetime或smalldatetime类型的数据,其值为date值加上datepart和number参数指定的时间间隔
    datediff(datepart,date1,date2)  返回date1和date2间的时间间隔,其单位由datepart参数决定
    datename(detepart,date)       返回日期中指定部分的字符串
    datepart(datepart,date)       返回日期中指定对应的整数值
    

    日期元素对应取值范围

    元素名称 缩写  取值范围
    year          yy      1753-9999
    quarter       qq       1-4
    month         mm       1-12
    day of year   dy      1-366
    day           dd       1-31
    week          wk       0-51
    hour          hh       0-23
    minute        mi       1-59
    second        ss       1-59
    millsecond      ms      0-999
    
    • 获取表的字段值
    -- 查看表结构
    SELECT syscolumns.name, systypes.name AS type, syscolumns.isnullable, syscolumns.length, syscomments. TEXT defaultvalue, CONVERT ( nvarchar (50), ISNULL( extended_properties. VALUE, '' )) express FROM syscolumns LEFT JOIN syscomments ON syscomments.id = syscolumns.cdefault LEFT JOIN sys.extended_properties extended_properties ON extended_properties.major_id = syscolumns.id AND syscolumns.colid = extended_properties.minor_id JOIN systypes ON syscolumns.xusertype = systypes.xusertype WHERE syscolumns.id =
    object_id('LessonUserRegister')
    
    • 替换语法:
    REPLACE ( ''string_replace1'' , ''string_replace2'' , ''string_replace3'' )
    
    • sql 思路
    SELECT
        auw.Id id,
        MAX (auw.wxname) name
        ,COUNT (*) COUNT
    FROM
        UserTryCourseGroupUserR utcgur
    JOIN UserTryCourseMessRecord utcmr ON utcgur.MessRecordId = utcmr.Id
    right JOIN AdminUserWx auw ON utcmr.AdminWxId = auw.Id
    WHERE
        auw.AdminId = 817
    AND utcgur.GroupId IS NULL
    GROUP BY
        auw.Id
    
    data:
    146 鸭题库龙小昕  4
    341 鸭题库莫素素老师    1
    
    不能包含统计数量为0的,即左右关联也不能解决
    
    通过其他方式解决
    
    SELECT
        auw1.id,
        auw1.wxname name,
        (
            SELECT
                COUNT (*) num
            FROM
                UserTryCourseGroupUserR utcgur
            LEFT JOIN UserTryCourseMessRecord utcmr ON utcgur.MessRecordId = utcmr.Id
            LEFT JOIN AdminUserWx auw ON utcmr.AdminWxId = auw.Id
            WHERE
                auw.id = auw1.Id
            AND utcgur.GroupId IS NULL
        ) COUNT
    FROM
        AdminUserWx auw1
    WHERE
        auw1.AdminId = 817
    
    data:
    146 鸭题库龙小昕  4
    341 鸭题库莫素素老师    1
    342 鸭题库燕玲老师 0
    
    通过更换主表,其他数据通过子查询可以实现
    
    • 清空表数据
    -- 清空tableName表
    TRUNCATE  TABLE  [tableName]
    

    SQL2008 SQL Server身份认证方式登录失败(错误18456)笔记

    相关文章

      网友评论

          本文标题:sql_server

          本文链接:https://www.haomeiwen.com/subject/awjlvqtx.html