程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> 將一切相符前提的成果拼接成一列並用逗號離隔的一個sql語句

將一切相符前提的成果拼接成一列並用逗號離隔的一個sql語句

編輯:MSSQL

將一切相符前提的成果拼接成一列並用逗號離隔的一個sql語句。本站提示廣大學習愛好者:(將一切相符前提的成果拼接成一列並用逗號離隔的一個sql語句)文章只能為提供參考,不一定能成為您想要的結果。以下是將一切相符前提的成果拼接成一列並用逗號離隔的一個sql語句正文



create table tb(id int, value varchar(10))
insert into tb values(1, 'aa')
insert into tb values(1, 'bb')
insert into tb values(2, 'aaa')
insert into tb values(2, 'bbb')
insert into tb values(2, 'ccc')
go
create function [dbo].[f_str](@id int) returns nvarchar(1000)
as
begin
declare @str nvarchar(1000)
set @str = ''
select @str = @str + ',' + cast(value as nvarchar(900)) from tb where id = @id
set @str = right(@str , len(@str) - 1)
return @str
end
go
--挪用函數
select id , value = dbo.f_str(id) from tb group by id

運轉成果:

原來在下面的函數中一切的nvarchar都是varchar類型的,而且下面函數的白色處在挪用cast辦法時,並未指定長度。同伙測試後發明,成果會在30個字符 時截斷,本來認為是varchar和nvarchar的差別,我試著將varchar改成了nvarchar,同伙測試的成果是在54個字符處截斷。我查了下,是varchar的默許長度成績,見sql server聯機叢書中上面的解釋:


char 和 varchar
固定長度 (char) 或可變長度 (varchar) 字符數據類型。

char[(n)]

長度為 n 個字節的固定長度且非 Unicode 的字符數據。n 必需是一個介於 1 和 8,000 之間的數值。存儲年夜小為 n 個字節。char 在 SQL-92 中的同義詞為 character。

varchar[(n)]

長度為 n 個字節的可變長度且非 Unicode 的字符數據。n 必需是一個介於 1 和 8,000 之間的數值。存儲年夜小為輸出數據的字節的現實長度,而不是 n 個字節。所輸出的數據字符長度可認為零。varchar 在 SQL-92 中的同義詞為 char varying 或 character varying。

正文
假如沒有在數據界說或變量聲明語句中指定 n,則默許長度為 1。假如沒有應用 CAST 函數指定 n,則默許長度為 30。

將為應用 char 或 varchar 的對象被指派數據庫的默許排序規矩,除非用 COLLATE 子句別的指派了特定的排序規矩。該排序規矩掌握用於存儲字符數據的代碼頁。

支撐多說話的站點應斟酌應用 Unicode nchar 或 nvarchar 數據類型以盡可能削減字符轉換成績。假如應用 char 或 varchar:

假如願望列中的數據值年夜小接近分歧,請應用 char。


假如願望列中的數據值年夜小明顯分歧,請應用 varchar。
假如履行 CREATE TABLE 或 ALTER TABLE 時 SET ANSI_PADDING 為 OFF,則一個界說為 NULL 的 char 列將被作為 varchar 處置。

當排序規矩代碼頁應用雙字節字符時,存儲年夜小依然為 n 個字節。依據字符串的分歧,n 個字節的存儲年夜小能夠小於 n 個字符。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved