MSSQL 常用範例
--字串重複擷取
DECLARE @strCount int
DECLARE @strs varchar(2000)
DECLARE @strField varchar(10)
set @strs = 'A,B,C,D'
while (@strs !='')
begin
--取的第一個元素位置
set @strCount = PATINDEX('%,%', @strs)
if (@strCount > 0)
begin
--依續取得元素的值
set @strField = LEFT(@strs,@strCount-1)
--取得剩下元素的值
set @strs = RIGHT(@strs,LEN(@strs)-@strCount)
end
else
begin
set @strField = ''
set @strs = ''
end
select '@strField=' + @strField
select '@strs=' + @strs
end
顯示結果:
--SQL SERVER-取得資料庫所有資料表,取得資料表所有欄位
SELECT * FROM INFORMATION_SCHEMA.Tables
PS:經測試有些非資料表,也要顯示出來
--字串查詢&取代
--讀取出title標題的第一個字為字母數據
select * from news where title like '[a-zA-Z]%'
--讀取出title裡麵包含有空格數據
select * from news where title like '% %'
--取代字串空白
UPDATE news SET title = REPLACE (title ,' ','')
--查詢空白字串注意事項:(來源)
在 MS SQL 中,空白字元在【某些的字串函數或比較式】執行結果會與預期的不一樣,例如
Sample 1:
IF ( ' ' = '' ) -- 一個是兩個空白,一個是空字串
print '相等'
else
print '不相等';
執行結果是] ==> 相等
Sample 2:
print Len(' ') -- 結果等於 0
Sample 3:
print Len('123 ') -- 結果等於 3 Len 函數會自動將字尾的空白去掉
Sample 4:
print Len(' 123') -- 結果等於 5
Q: 那如果要真的求出字串 '123 ' ,長度為 5 ,指令該用什麼??
==> A: 後面有空白的字元長度,要求出實際長度,不可以使用 Len ,要使用 DataLength ==> 這是求出【位元組】的長度
※特別注意:
DataLength 是求出位元組,所以
當碰上中文字時,每一個字的長度皆為 2
當型態為:nvarchar、nchar 時,不管英文、符號,長度皆為 2
當型態為:varchar、char 時,英文、符號的長度皆為 1
範例如下
Declare @sWideString nvarchar(20) -- Unicode
Declare @sString varchar(20) -- 一般字元
Set @sWideString = '我是中文字加 ABC '
Set @sString = '我是中文字加 ABC '
print Len(@sWideString) -- 長度 10 (因為 Len 指令會將尾端的空白去掉)
print Len(@sString) -- 長度 10 (因為 Len 指令會將尾端的空白去掉)
print DataLength(@sWideString) -- 長度 26
print DataLength(@sString) -- 長度 19
留言