![](/img/trans.png)
[英]T-SQL (transact-SQL) valid in SQLite and other SQL databases?
[英]How to remove trailing characters with Transact-SQL (t-sql)?
使用transact-sql(t-sql),我有一個字符串常量和三個字符串變量,我想用每個值之間的分號分隔符進行連接。 這三個字符串變量中的每一個有時都是空白或為null,這會導致出現我不希望使用一個,兩個或三個分號分隔符的情況。
我嘗試了應該根據t-sql網站工作的Concat_ws()函數,但是收到錯誤消息,提示無法識別的函數名。 我用Replace()函數嘗試了兩個語句,其中我用空格替換了雙或三分號。 那行得通,但看起來很粗糙,不會幫助我僅替換一個尾隨的分號。 有任何想法嗎?
當var為空白時,產生太多分號的示例代碼:
Concat('Label ', ';', var1, ';', var2, ';', var3) as Result
這等效於SQL Server中的concat_ws()
:
stuff( coalesce(';' + nullif(var1, ''), '') + coalesce(';' + nullif(var2, ''), '') + coalesce(';' + nullif(var3, ''), ''), 1, 1, '') as Result
您可以在此結果前加上'Label '
。 我不確定您是否真的要在'Label '
之后加一個分號,所以在concat_ws()
也不適合。
為此,您只需要在CONCAT語句中將';', @var#
更改為';'+@var#
。
DECLARE
@var1 VARCHAR(10) = 'abc',
@var2 VARCHAR(10) = 'xyz',
@var3 VARCHAR(10) = '123';
SELECT CONCAT('Label ', ';'+@var1, ';'+@var2, ';'+@var3) as Result;
在桌子上:
DECLARE
@v1 VARCHAR(10) = 'abc',
@v2 VARCHAR(10) = 'xyz',
@v3 VARCHAR(10) = '123';
DECLARE @table TABLE (var1 VARCHAR(10),var2 VARCHAR(10),var3 VARCHAR(10));
INSERT @table VALUES (@v1,@v2,NULL),(@v1,NULL,NULL),(@v1,NULL,@v3),(NULL,NULL,NULL)
SELECT CONCAT('Label ', ';'+var1, ';'+var2, ';'+var3) as Result
FROM @table;
結果:
Result
---------------------------------------
Label ;abc;xyz
Label ;abc
Label ;abc;123
Label
要處理空格,請使用NULLIF(var#,'')包裝var#。 最終解決方案:
DECLARE
@v1 VARCHAR(10) = 'abc',
@v2 VARCHAR(10) = 'xyz',
@v3 VARCHAR(10) = '123';
DECLARE @table TABLE (var1 VARCHAR(10),var2 VARCHAR(10),var3 VARCHAR(10));
INSERT @table VALUES (@v1,@v2,NULL),(@v1,NULL,NULL),(@v1,NULL,@v3),(NULL,NULL,NULL),
(@v1,@v2,''),(@v1,'',''),(@v1,'',@v3),(NULL,'',NULL);
SELECT CONCAT('Label ', ';'+NULLIF(var1,''), ';'+NULLIF(var2,''), ';'+NULLIF(var3,'')) as Result
FROM @table;
結果:
Result
---------------------------------------
Label ;abc;xyz
Label ;abc
Label ;abc;123
Label
Label ;abc;xyz
Label ;abc
Label ;abc;123
Label
使用isnull()
:
select
concat('Label ', isnull(';' + var1, ''), isnull(';' + var2, ''), isnull(';' + var3, '')) as Result
from tablename
參見演示 。
結果:
> | Result |
> | :----------- |
> | Label ;a;b;c |
> | Label ;d;e |
> | Label ;f;g |
> | Label ;h;i |
> | Label ;j |
> | Label ;k |
> | Label ;l |
> | Label |
DECLARE @VAR1 VARCHAR(10)
DECLARE @VAR2 VARCHAR(10)
DECLAR @VAR3 VARCHAR(10)
DECLARE @VAR11 VARCHAR(10)
DECLARE @VAR22 VARCHAR(10)
DECLAR @VAR33 VARCHAR(10)
SET @VAR1 = …
SET @VAR2 = …
SET @VAR3 = …
IF @VAR1 IS NOT NULL
BEGIN
SET @VAR11 = CONCAT(@VAR1,';')
ELSE
SET @VAR11 = ''
IF @VAR2 IS NOT NULL
BEGIN
SET @VAR22 = CONCAT(@VAR2,';')
ELSE
SET @VAR22 = ''
IF @VAR3 IS NOT NULL
BEGIN
SET @VAR33 = CONCAT(@VAR2,';')
ELSE
SET @VAR33 = ''
Concat('Label ', ';', @var11, @var22, @var33) as Result
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.