SQL SERVER 字串操作注意點

2021-09-05 23:17:11 字數 1781 閱讀 2988

有一張新聞資料表tb_news,該錶有字段news_id int, news_type int,前者是主鍵,後者是新聞所屬欄目id,現在要求是這樣:

給定乙個字串a_right,該字串中包含多個新聞欄目id值,即news_type,並且儲存格式是'b'+news_type+'v',各id值之間以逗號相隔,

例如:b1v, b2v, b3v……

現在要從新聞表中查詢出所有news_type經格式轉換為'b'+news_type+'v'後,該格式的新聞欄目被包含在a_right中的新聞,剛

開始寫的查詢語句如下:

select * from tb_news where charindex('b'+str(news_type)+'v', @a_right) >= 1

結果執行結果與願望中的結果大相徑庭!

經過反覆排查,最後終於查出原因所在:sql server的str()函式有兩個引數:str(express, length),當未指定length時,預設

是轉為字串後,字串左邊保留10個空字元,例如:print 'b'+str(2),則結果為b          2。因此,需要將轉化後的字串去掉空值,

此時可以使用ltrim()函式,例如執行:print 'b'+ltrim(str(2)),結果為b2。

於是將上面的查詢語句改為:

select * from tb_news where charindex('b'+ltrim(str(news_type))+'v', @a_right) >= 1

順利執行!

附:一 str函式詳解

在sql server manage studio中執行:

print 'b'+str(333, 1) 結果為:b3;

print 'b'+str(333, 2) 結果為:b33;

print 'b'+str(333, 4) 結果為:b*;

print 'b'+str(333)    結果為:b          333

二 sql server中針對字串操作的函式有如下幾個常用:

1.1 長度與分析用  

datalength(char_expr) 返回字串包含字元數,但不包含後面的空格 

substring(expression,start,length) 不多說了,取子串 

right(char_expr,int_expr) 返回字串右邊int_expr個字元  

1.2 字元操作類  

upper(char_expr) 轉為大寫 

lower(char_expr) 轉為小寫

space(int_expr) 生成int_expr個空格

replicate(char_expr,int_expr)複製字串int_expr次

reverse(char_expr) 反轉字串

stuff(char_expr1,start,length,char_expr2) 將字串char_expr1中的從start開始的length個字元用char_expr2代替 

ltrim(char_expr) 去掉左邊的空格;rtrim(char_expr) 去掉右邊的空格

ascii(char) char(ascii) 兩函式對應,取ascii碼,根據ascii嗎取字元  

1.3 字串查詢

charindex(char_expr,expression) 返回char_expr的起始位置;索引從數字1開始,而非0

patindex("%pattern%",expression) 返回指定模式的起始位置,否則為0  

python中字串型別json操作的注意事項

python操作json的方法有 json.dumps 將json物件 字典 轉換為字串物件 json.loads 將字串物件轉換為json物件 字典 如果定義json物件 jsonstring1 可以直接按json操作,比如 print jsonstring1.keys print jsonstr...

sqlserver字串拆分

1 sql對字串的處理能力比較弱,比如我要迴圈遍歷象1,2,3,4,5這樣的字串,如果用陣列的話,遍歷很簡單,但是t sql不支援陣列 2 自己來實現 create function udf split words nvarchar max 原始字串 splitstr varchar 50 分割字元...

Sqlserver 字串分割

字串分割,返回字串按指定分割符分割後長度 使用 select dbo.fun get strarraylength 1,2,3,4 create function dbo fun get strarraylength str varchar 1024 要分割的字串 split varchar 10 ...