SQL的字元的拼接和拆分

2021-09-05 12:23:15 字數 1695 閱讀 3510

提要:這個問題是我在筆試的時候出現的問題,當初看到題目,腦海一片空白,筆試完畢,在網上查詢之後,才發現這類問題考察的是sql的字元的拼接和拆分問題,下面進行正題:

1、具體表table1和table2如下所示:

表table1:

type_name  city_name

a      '西安'

a      '蘭州'

a      '酒泉'

a      '武威'

b      '北京'    

b      '上海'

b      '廣州'

表table2:

type_name  city_name

a      '西安、蘭州、酒泉、武威'

b      '北京、上海、廣州'

2、問題1:如何將table1轉換為table2?(將多行資料合併在一行裡)

select type_name,

(stuff(

(select ',' + city_name from table1 a where a.type_name = b.type_name for xml path ('')),

1,1,

''  ---從剛開始的位置刪除乙個元素,用『』代替

))as city_name

from table1 b

group by type_name    

3、問題2:如何將table2轉換為table1?(將一行的資料拆分處理)

select a.type_name, b.city_name 

from( 

select type_name, [city_name] = convert(xml,'' + replace([name], ',', '

') + '

4、主要函式講解:

sql stuff for xml path  

stuff(param1, startindex, length, param2)-- 是刪除指定長度的字元,並在指定的起點處插入另一組字元

將param1中自startindex(sql中都是從1開始,而非0)起,刪除length個字元,然後用param2替換刪掉的字元。

具體例子如下:

select stuff('abcdefg',1,0,'1234')       --結果為'1234abcdefg'  -- 解釋從第乙個起刪除0個元素,然後用'1234'替換刪除0元素位置

select stuff('abcdefg',1,1,'1234')       --結果為'1234bcdefg'   -- 解釋從第乙個起刪除1個元素,然後用'1234'替換刪除a元素位置

select stuff('abcdefg',2,1,'1234')       --結果為'a1234cdefg'   -- 解釋從第二個起刪除1個元素,然後用'1234'替換刪除b元素位置

select stuff('abcdefg',2,2,'1234')       --結果為'a1234defg'    -- 解釋從第二個起刪除2個元素,然後用'1234'替換刪除bc元素位置

PHP中字串拆分和拼接

今天有人問我,給一串不確定的字串,去第三個逗號後面的,組成新的字串,該怎麼寫,我當時就想到了迴圈擷取。可能方法比較老套,但還是可以實現需求的。str 123,134,41234,1234,1324,1513,15,15123 function start str,n return implode s...

sql和mysql字串拼接

sql select1 1 2 int 數字相加為正常計算 select 1 1 11 varchar 字串相加為字串拼接 select 1 1 2 int 數字加字串 會將字串強轉為數字,在進行正常計算 select1 j1 error 字串轉換失敗mysql select1 2 3 int 正常...

SQL 拼接字串

寫sql的時候有時候用到需要拼接多個字段或者在查詢出結果的字段裡加入一部分固定的字串。方法一 在查詢到的結果後,用 去拼接。這種方法就不在贅述。方法二 使用資料庫提供的方法concat a,b oracle 中concat a,b 只能有兩個引數,如果concat中連線的值不是字串,那麼oracle...