sqlserver拼接字符串函數(shù) SQL怎么拼接字符串?
SQL怎么拼接字符串?字符串 字符串,則直接進(jìn)行拼接。若某字段為NULL,則計(jì)算結(jié)果為NULL。 SQL Server中沒(méi)有concat函數(shù)(SQL Server 2012已新增concat函數(shù))
SQL怎么拼接字符串?
字符串 字符串,則直接進(jìn)行拼接。若某字段為NULL,則計(jì)算結(jié)果為NULL。 SQL Server中沒(méi)有concat函數(shù)(SQL Server 2012已新增concat函數(shù))。oracle和mysql中雖然都有concat,但是oracle中只能拼接2個(gè)字符串,所以建議用||的方式;mysql中的concat則可以拼接多個(gè)字符串。
SQL查詢合并字符串?
可以的,用交叉方法 select a列, max(case when b列="a" then "a" else "" end) 列1, max(case when b列="b" then "b" else "" end) 列2, max(case when b列="c" then "c" else "" end) 列3 into temp_1219--插入臨時(shí)表 from a表 group by a列 這個(gè)是靜態(tài)的行列轉(zhuǎn)換, 如果是動(dòng)態(tài)的行列裝換,也就是說(shuō)你不知道表中a列的行數(shù)有很多,需要寫(xiě)過(guò)程對(duì)sql語(yǔ)句進(jìn)行拼接 然后根據(jù)你的需要再對(duì)字段進(jìn)行合并 select a列,列1 "," 列2 "," 列3 b列 into temp_1219_result--插入結(jié)果表 from temp_1219 ok!/*--優(yōu)化update temp_1219 set 列2="," 列2where len(列2)>0update temp_1219 set 列3="," 列3where len(列3)>0select a列,列1 列2 列3 b列 into temp_1219_result2--插入結(jié)果表 from temp_1219 */
為什么一些大公司都喜歡用字符串拼接sql?
先表明立場(chǎng),任何時(shí)候都不要在后臺(tái)代碼里拼接sql。(除了中小公司內(nèi)部報(bào)表類需求外)
首先,提主遇到的大公司拼接sql,“都”明顯是偽命題。在互聯(lián)網(wǎng)公司的應(yīng)用領(lǐng)域內(nèi),是嚴(yán)禁嵌套,拼接sql的。一個(gè)大流量超高并發(fā)的系統(tǒng),數(shù)據(jù)庫(kù)鏈接池資源,是非常寶貴的?;緵Q定了系統(tǒng)的性能上限。不然為什么加分布式緩存,數(shù)據(jù)庫(kù)分庫(kù)分表呢?對(duì)于高頻低熵的系統(tǒng),明顯高頻次低耗時(shí)的數(shù)據(jù)庫(kù)鏈接是最可靠的方式。
其次,對(duì)于各種大型的傳統(tǒng)IT服務(wù)業(yè)和政府,銀行類系統(tǒng),由于系統(tǒng)本身相對(duì)于一線互聯(lián)網(wǎng)公司,并發(fā)非常低。所以線程對(duì)數(shù)據(jù)庫(kù)鏈接的持有時(shí)間可以稍微耗時(shí)長(zhǎng)一些,以得到比較快的系統(tǒng)響應(yīng)。其實(shí)這么做,也并非是明智之舉。明顯,互聯(lián)網(wǎng)類的技術(shù)拆分和技術(shù)架構(gòu),對(duì)于大公司的各種場(chǎng)景更為合適。傳統(tǒng)的IT那種所有難題扔sql,扔給存儲(chǔ)過(guò)程的方式已經(jīng)過(guò)時(shí)多年。
最后,對(duì)于高并發(fā)的大型在線系統(tǒng),有復(fù)雜查詢類的需求,絕不推薦在后臺(tái)sql中用復(fù)雜的查詢?nèi)?shí)現(xiàn)。這個(gè)對(duì)于系統(tǒng)的成本消耗明顯太高。對(duì)于復(fù)雜的查詢,自然有其他的技術(shù)架構(gòu)去實(shí)現(xiàn)。
可以多多關(guān)注一線互聯(lián)網(wǎng)公司的架構(gòu)技術(shù),也可以看下我之前的回答。
發(fā)現(xiàn)持續(xù)還有人關(guān)注本問(wèn)題,看到大家來(lái)自各個(gè)不同業(yè)務(wù)領(lǐng)域,再聊一些吧。
本身這個(gè)問(wèn)題是高并發(fā)類系統(tǒng)的常識(shí)性問(wèn)題。不管是低頻高熵的傳統(tǒng)業(yè)務(wù),還是高頻低熵的互聯(lián)網(wǎng)業(yè)務(wù)公司,技術(shù)架構(gòu)往往是業(yè)務(wù)特性來(lái)決定的。
傳統(tǒng)IT公司,IT服務(wù)類公司確實(shí)仍然存在拼接這樣粗暴的實(shí)現(xiàn)方式。因?yàn)椴l(fā)低,迭代快。當(dāng)然如果能滿足低頻低熵的業(yè)務(wù)需求,也無(wú)可厚非。但單單從技術(shù)角度看,這么做可能并不是最優(yōu)。事實(shí)上,傳統(tǒng)公司的新項(xiàng)目也很少有人會(huì)這么玩了。(節(jié)省幾臺(tái)服務(wù)器,也是錢(qián)啊)。
很多同學(xué)領(lǐng)域不同,對(duì)業(yè)務(wù)需要的技術(shù)理解自然會(huì)有區(qū)別。技術(shù)同學(xué)可以適當(dāng)多看機(jī)會(huì),多接觸不同業(yè)務(wù)領(lǐng)域的技術(shù)實(shí)現(xiàn)方案。多思考技術(shù)架構(gòu)這樣設(shè)計(jì)背后的業(yè)務(wù)原因。
另外,如果有任何問(wèn)題或質(zhì)疑,歡迎去看我之前的回答,或留言與我討論。不喜勿噴。
SQL怎么拼接字符串?
SQL 字符串拼接直接用 號(hào)
如下列SQL
聲明變量
declare @T nvarchar(50)
declare @T1 nvarchar(50)
set @T="12434"
set @T1="abc"
下面是拼接字符串SQL:
select @T @T1
結(jié)果:12434abc
如果是別的類型,用convert 函數(shù)直接轉(zhuǎn)換
如 convert(varchar,"需要轉(zhuǎn)換的數(shù)據(jù)")
sql查詢字符串拼接?
拼串的時(shí)候用char(39) 代替單引號(hào),char(37)代替%
SET @sql = "SELECT * FROM authors WHERE address LIKE " char(39) char(37) @str char(37) char(39)
SQL函數(shù)將一列拼接字符串?
尚子素說(shuō)的沒(méi)錯(cuò)。這種問(wèn)題,我平常除了喜歡用動(dòng)態(tài)sql寫(xiě)法,下來(lái)就是喜歡這個(gè)寫(xiě)法啦,所以補(bǔ)充一下尚子素的說(shuō)明:首先,確定你要合并的列SELECT user_name FROM dbo.users其次,將其以xml格式輸出SELECT user_name FROM dbo.users FOR XML PATH然后,去除包裹的節(jié)點(diǎn)名稱 SELECT "," user_name FROM dbo.users FOR XML PATH("")(這里,"," user_name以后變成了無(wú)列名狀態(tài),","可以填充具體的分隔符,PATH("")是自定義外層節(jié)點(diǎn)名稱) 下來(lái),去掉最終結(jié)果首位的分隔符,以空字符替代(PS:這樣不用數(shù)長(zhǎng)度) SELECT STUFF((SELECT "," user_name FROM dbo.users FOR XML PATH("")),1,1,"")