個人sql 記錄

 

----------2017-01-03 21:56:56----------
--字符串分隔 start-------------
use LDSQL
GO 
 CREATE function [dbo].[split]
(
 @str varchar(4500),
 @sep varchar(1)
)
returns @t  table(id int identity(1,1),col   varchar(4500))
as
begin
--分別定義了 目前位置,分隔符開始和字符串長度和,當前獲取的字符串
declare @posi int,@start int,@str_leg int,@gchar varchar(2),@mingzhong int
set @str_leg=len(@str)
set @posi=0
set @start=0
set @mingzhong=0
while(@posi<=@str_leg)
    begin
    set @gchar=substring(@str,@posi,1)
     if(@gchar=@sep)
         begin
             insert into @t  values(substring(@str,@start+1,@posi-@start-1))
             set @start=@posi
         end
      set @posi=@posi+1
     end
 return
end 
Go
---------調用eg
select * from split('1,2,3,4',',')
--字符串分隔 end-------------

use LDSQL  
----建立庫 start
create database LDSQL1 
on  primary  -- 默認就屬於primary文件組,可省略
(
/*--數據文件的具體描述--*/
    name='LDSQL_data',  -- 主數據文件的邏輯名稱
    filename='D:\LDSQL_data.mdf', -- 主數據文件的物理名稱
    size=5mb, --主數據文件的初始大小
    maxsize=100mb, -- 主數據文件增加的最大值
    filegrowth=15%--主數據文件的增加率
)
log on
(
/*--日誌文件的具體描述,各參數含義同上--*/
    name='LDSQL_log',
    filename='D:\LDSQL_log.ldf',
    size=2mb,
    filegrowth=1mb
)
----建立庫 end 

---刪庫 start 
use master -- 設置當前數據庫爲master,以便訪問sysdatabases表
go
if exists(select * from sysdatabases where name='LDSQL1')
drop database LDSQL1
go
---刪庫end
--建立表start
use LDSQL
go 
if exists(select * from sysobjects where name='userinfo')
drop table userinfo
create table userinfo
(
    id        int     identity(1,1) primary key,
    name     char(6) ,
    age       char(4)    ,
    address   nvarchar(50)    
)

alter table userinfo add time1 datetime         --添加字段
alter table userinfo add timestamp nvarchar(50) --添加字段
alter table userinfo add remark nvarchar(50)    --添加字段
ALTER TABLE userinfo DROP COLUMN remark         --刪除字段
go
--alter table 表名
--add constraint 約束名 約束類型 具體的約束說明
--alter table 表名
--drop constraint 約束名
--alter table stuMarks
--add constraint UQ_stuNo Unique(stuNo)
--alter table stuMarks
--drop constraint UQ_stuNo
--建立表end 

--插入數據 start
  insert into userinfo(name, age, address)  values('張三',20,'湖南')
   Go
   --插入多條 
   declare @i int 
   set @i=1;
   while @i<101
   begin
     insert into userinfo(name, age, address,time1) values('張三',20+@i,'湖南',GETDATE())
     set @i=@i+1
     end
     Go

--插入數據end
--添加帳號 start
/*--添加SQL登陸帳戶--*/
exec sp_addlogin 'LD', 'a.123456'  -- 帳戶名爲LD,密碼爲a.123456
--刪除xie帳戶名
exec sp_droplogin 'LD'
--添加帳戶結束
--添加權限 start
use LDSQL
go
  grant select,update,insert on userinfo to LD
  grant create table to LD
go
--添加權限end
--存儲過程 start 
----1 簡單存儲過程  start
if object_id('usp_getuserinfo_simple') is not null
drop proc usp_getuserinfo_simple

Go 
create proc usp_getuserinfo_simple
as
select * from [dbo].[userinfo]

--執行
exec usp_getuserinfo_simple
----1 簡單存儲過程  end
----2 參數輸入存儲過程  start
if object_id('usp_getuserinfo_input') is not null
drop proc usp_getuserinfo_input
Go 
create proc usp_getuserinfo_input
@Age int
as
select * from [dbo].[userinfo] where age=@Age

--執行
exec usp_getuserinfo_input 21
----2 參數輸入存儲過程  end
----3 參數輸出output存儲過程  start
if object_id('usp_getuserinfo_output') is not null
drop proc usp_getuserinfo_output
Go 
create proc usp_getuserinfo_output
@Age int output
as
select @Age=age from userinfo 
Go
--執行
declare @Age int
exec usp_getuserinfo_output @Age output
select @Age  


----3 參數輸出output存儲過程  end

----4 參數輸入輸出output存儲過程  start
if object_id('usp_getuserinfo_input_output') is not null
drop proc usp_getuserinfo_input_output
Go 
create proc usp_getuserinfo_input_output
@id int,
@Age int output
as
select @Age=age from userinfo where id=@id
Go
--執行

declare @Age int
exec usp_getuserinfo_input_output 6,@Age output
select @Age  
----4 參數輸入輸出output存儲過程  end

----5 參數輸入輸出return存儲過程  start
if object_id('usp_getuserinfo_return') is not null
drop proc usp_getuserinfo_return
Go 
Go
create proc usp_getuserinfo_return
as
declare @age int
begin
select @age=[age] from [dbo].[userinfo]
return @age
end
Go

declare @age int
exec @age=usp_getuserinfo_return
select @age 
----5 參數輸入輸出return存儲過程  end
----6 參數輸入輸出output_return存儲過程  start
if object_id('usp_getuserinfo_intput_output_return') is not null
drop proc usp_getuserinfo_intput_output_return
Go 
Go
create proc usp_getuserinfo_intput_output_return
@id int,
@name char(6)output
as
declare @age int

begin
select @age=[age],@name=name from [dbo].[userinfo] where id=@id
return @age
end
Go

declare @age int
declare @name char(6) 
exec @age=usp_getuserinfo_intput_output_return 6,@name output
select @age,@name
----6 參數輸入輸出input_output_return存儲過程  end

--7 分頁 start
  if object_id('usp_select_page') is not null
  drop proc usp_select_page
Go 
create proc usp_select_page
(
@pageIndex int,--當前頁碼
@pagecount int--每頁條數
)
as
begin
select * from (select ROW_NUMBER() over(partition by SameRow order by Id) as Row,* from (select *,1 as SameRow from userinfo )m)o where o.Row between @pageIndex*@pagecount+1 and (@pageIndex+1)*@pagecount
end

exec usp_select_page 0,10
--7 分頁 end
--8 流水號 start --
 CREATE TABLE [dbo].[SriaNum] (
[Num] [int] NOT NULL
)
Go
if object_id('usp_GetSerialNumber') is not null
  drop proc usp_GetSerialNumber
Go
create PROC usp_GetSerialNumber
@SerialNumber VARCHAR(4) OUTPUT -- 指明爲輸出參數
AS
IF NOT EXISTS(SELECT * FROM SriaNum) 
BEGIN
INSERT INTO SriaNum values(1)
END
ELSE
BEGIN
UPDATE SriaNum SET Num=Num+1 
END

SELECT 
@SerialNumber = REPLICATE('0',4-LEN(Num))+CONVERT(VARCHAR(4),Num) --生成[000000001, 999999999]範圍內的流水號
FROM   SriaNum

Go
 --執行 
 DECLARE @TEST VARCHAR(4)
EXECUTE [dbo].usp_GetSerialNumber @TEST OUTPUT -- 指明爲輸出變量
SELECT @TEST AS SERIALNUMBER -- 得到流水號
-- 
--8 流水號 end
--9 時間zhuo start
Go  
CREATE FUNCTION UNIX_TIMESTAMP (@ctimestamp datetime) RETURNS integer
AS
BEGIN
 /* Function body */
 declare @return integer
 SELECT @return = DATEDIFF(SECOND,{d '1970-01-01'}, @ctimestamp)
 return @return
END
 Go 

 CREATE FUNCTION FROM_UNIXTIME (@ts integer) RETURNS datetime 
AS
BEGIN
 /* Function body */
 declare @return datetime
 select @return = DATEADD(second, @ts, {d '1970-01-01'})
 return @return
END
Go 


Go
--9 時間-- end



--存儲過程 end

--隨機取出10條數據 start
select top 10 * from [dbo].[userinfo] order by newid() 
--隨機取出10條數據 end
Go
--in 的使用方法
select * from [dbo].[userinfo] where [age]  in (23,34,56,55)
select * from [dbo].[userinfo] where [age] not in (23,34,56,55)

--查詢重複
select * from userinfo where id not in (select max(id) from userinfo group by name,age)
--刪除重複
Delete from userinfo where id not in (select max(id) from userinfo group by name,age)

--模糊查詢
 select * from [dbo].[userinfo] where name like '%張%'

 --日程安排提早五分鐘提醒
  select * from [dbo].[userinfo] where datediff(minute,time1,getdate())>5

 ---==================================

    --1當前時間戳 獲取sql
    SELECT DATEDIFF(S,'1970-01-01 00:00:00', GETDATE()) - 8 * 3600 
       SELECT DATEDIFF(s, '1970-01-01 00:00:00', GETUTCDATE())
  
    --js
    --Math.round(new Date().getTime()/1000) 
    --C#
   --long a = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
    ---===========================================
    --2時間戳→普通時間sql
     SELECT DATEADD(s,1483461862,'1970-01-01 08:00:00') as DTime
     SELECT DATEADD(S,1483461862 + 8 * 3600,'1970-01-01 00:00:00') 

     --js
    -- var unixTimestamp = new Date(Unix timestamp * 1000) 
    --而後 commonTime =        unixTimestamp.toLocaleString()
    
    --3 普通時間 → Unix時間戳
     --sql
     SELECT DATEDIFF(s, '1970-01-01 08:00:00', '2017-01-04 00:44:22.000')
     --js
    -- var commonTime = new Date(Date.UTC(year, month - 1, day, hour, minute, second))
    


  ---=====流水號 start===============================
  
  --流水號生成規則:
  --1:流水號總長度爲22位數 
  --2:流水號總共分三部分:標頭(2位)+ 時間戳(YYYYMMDDHHmmSSsss共17位)+ 隨機碼(3位)
  --舉例流水號:SN20150812102400111234
   --獲取時間戳
select convert(varchar,replace(replace(replace(replace(convert(varchar,getdate(),121),'-',''),':',''),' ',''),'.',''))
--結果:20150703114447613
 
--獲取隨機碼
select substring(convert(varchar,rand()),3,3)
--結果:813
 
--獲取完整的流水號
SELECT 'SN'+convert(varchar,replace(replace(replace(replace(convert(varchar,getdate(),121),'-',''),':',''),' ',''),'.',''))+substring(convert(varchar,rand()),3,3)
--結果:SN20150703114447613813

  ---=====流水號 end===============================
exec xp_cmdshell 'mkdir d:\DB'
相關文章
相關標籤/搜索