顯示具有 Sql 標籤的文章。 顯示所有文章
顯示具有 Sql 標籤的文章。 顯示所有文章

2018年12月4日 星期二

[SQL] 複製資料結構


複製資料結構
Select * into NewTable
From OldTable
Where 1=0

複製TABLE資料結構和資料

Select * into NewTable From OldTable

2016年7月28日 星期四

[SQL] 暫存表 Temporary Tables

最近遇到一些情況

都是可以用到暫存表去解決的

偏偏以前從沒機會使用過(也沒聽過 XD)

感謝同事幫忙  >_<


狀況 1. 搜尋出來的資料量太大,EXCEL沒辦法全部貼上

---> 把資料撈進暫存表 再從暫存表下條件慢慢撈~~

狀況2. 依照EXCEL上的資料順序 去撈取資料, 再把撈到的資料貼到EXCEL上

  ---> 所以先把EXCEL的資料建表 order by 一些欄位 就可以了)

//狀況1
select email
into #tempMail
from member with(nolock)
where ..some conditions

SELECT * FROM #tempMail WHERE email LIKE 'A%' ORDER BY email

//狀況2
//暫存表的建法 是在table名稱前加上 #
create table #tmp_table (return_id nvarchar(30) , pid nvarchar(20))

//建完後insert資料
 insert into #tmp_table(return_id ,pid) values('XXXXXX','YYYY')




[SQL] 依照 in 來排序


// 這裡是用 ,pid, 當作排序依據 charindex(exp1,exp2)會回傳exp1所在的位置,起始值是1 
select pid,name
from temp
where pid in ('p004','p008','p435','p123','p056')
order by charindex(',' + cast(pid as varchar(10) + ',' , ',p004','p008','p435','p123','p056,' ))


//如果排序的對象有空白(不管空白是在字串前或後) 可以用 rtrim() 來Trim掉空白
select rtrim(pid),name
from temp
where pid in ('p004','p008','p435','p123','p056')
order by charindex(',' + rtrim(cast(pid as varchar(10)) + ',' , ',p004','p008','p435','p123','p056,' ))


reference:
rtrim()

charindex()

2016年7月6日 星期三

[SQL] CONCAT() 連結兩個以上的字串


//EX1
SELECT CONCAT(Country , + ',' + City , + ',' + Zip) as address
FROM Table

//Ex2
SELECT Country ',' + City + ',' + Zip as address
FROM Table


CONCAT(string1,string2)

可用來連接2個以上的字串, 參數值可以是字串,數字,空字串或NULL

那和單純的用 + 號串連字串 (Ex2) 有什麼不一樣呢?

不同點在於 如果我串連的字串裡面有欄位是 NUll

那麼Ex2 出來的結果 也會是 NULL ,但Concat 會忽略Null欄位 正常顯示

舉例: Zip 如果為 Null

Ex1 address 會是 英國,倫敦

Ex2 address 會是 NULL

2016年6月15日 星期三

[SQL] Datediff 算出時間間隔

例子昰 刪除 超過10分鐘的資料

會用到 DATEDIFF

DateDiff(時間單位,StartDate, EndDate) 昰用來計算時間的間隔,會回傳正負整數

DELETE FROM [Table] WHERE (
   SELECT ID FROM [Table] WHERE  DATEDIFF(minute,CreateTime,getdate()) > 10
)

--順便塞一下 用SQL 算出這個月的最後一天
SELECT DATEADD(MONTH, DATEDIFF(MONTH, -1, GETDATE() ), -1)

2016年6月2日 星期四

[SQL] 在Insert時 傳回新增的ID SCOPE_IDENTITY()

/* SCOPE_IDENTITY() 會返回最後一個識別值*/
INSERT INTO TableName (Column1,Value1,CreateDate) 
VALUES ('New',1,GETDATE())
SELECT ID FROM TableName WHERE ID = SCOPE_IDENTITY();


用ExecuteScalar()進行搜尋

會返回 int

其他類似的參數 還有 @@IDENTITY、  IDENY_CURRENT