create function Do_Split
(@InputString NVARCHAR(4000)
,@Delimiter NVARCHAR(50) = ';')
RETURNS @Items TABLE (Item NVARCHAR(4000)) AS
BEGIN --Function
IF (@Delimiter = ' ')
BEGIN
SET @Delimiter = ';'
SET @InputString = REPLACE(@InputString, ' ', @Delimiter)
END;
IF (@Delimiter IS NULL OR @Delimiter = '') SET @Delimiter = ';';
DECLARE @Item NVARCHAR(4000)
DECLARE @ItemList NVARCHAR(4000)
DECLARE @DelimIndex INT
SET @ItemList = @InputString;
SET @DelimIndex = CHARINDEX(@Delimiter, @ItemList, 0);
WHILE (@DelimIndex != 0)
BEGIN
SET @Item = SUBSTRING(@ItemList, 0, @DelimIndex);
INSERT INTO @Items VALUES (@Item);
-- Set @ItemList = @ItemList minus one less item
SET @ItemList = SUBSTRING(@ItemList, @DelimIndex+1, LEN(@ItemList)[email protected]);
SET @DelimIndex = CHARINDEX(@Delimiter, @ItemList, 0);
END; -- End WHILE
IF @Item IS NOT NULL -- At least one delimiter was encountered in @InputString
BEGIN
SET @Item = @ItemList;
INSERT INTO @Items VALUES (@Item);
END;
ELSE -- No delimiters were encountered in @InputString, so just return @InputString
BEGIN
INSERT INTO @Items VALUES (@InputString);
END;
RETURN
END -- End Function
go
用法:
SELECT * FROM Do_Split('581;#Jackson, Daniel H; 501;#Sims, Katy L; 606;#Lawrence, Jennifer O',';');
結果:
581
#Jackson, Daniel H
501
#Sims, Katy L
606
#Lawrence, Jennifer O
--
-- id full_name
-- -- ---------
-- 581 #Jackson, Daniel H
-- 501 #Sims, Katy L
-- 606 #Lawrence, Jennifer O
--
SELECT RIGHT(full_name, LEN(full_name) - 1) AS full_name
FROM your_table;
--
-- content
-- -------
-- 581;#Jackson, Daniel H
-- 501;#Sims, Katy L
-- 606;#Lawrence, Jennifer O
--
SELECT SUBSTRING(content, CHARINDEX('#', content) + 1, 1000) AS full_name
FROM your_table;
什麼是數據值'581的預期輸出; #Jackson,丹尼爾·H; 501; #Sims,Katy L; 606;#勞倫斯,詹妮弗奧? –
其實它是一個SELECT從。我想知道除了LEFT,SUBSTRING或RIGHT之外是否還有其他SQL語法。結果應該只是姓氏,名字和首字母。 –
Arsee
+0
因此,在給定的例子中,有3行從您的查詢'SELECT FROM '獲得,它們是'581; #Jackson,Daniel H;','501; #Sims,Katy L;'和'606; #勞倫斯,詹妮弗奧?目前還不清楚您使用的是哪個字段。我建議您通過添加原始查詢並重新格式化輸出_Data Value_來編輯您的帖子。 –
A
0
0
0
+0
+0
+0
相關問題
-
1. 從右側開始繪製圖形
-
2. 右側的ListGrid選擇
-
3. 所有選擇離開,只能從右側只有在
-
4. 我如何使richTextBox1中的行將從右側開始左側?
-
5. 如何從文本框的右側開始數字輸入?
-
6. slideDown effect()不能從頁面的右側開始
-
7. 在從mysql右側開始3個字符後添加空格
-
8. ImageView從左側開始
-
9. TextView不從左側開始
-
10. JQuery類名選擇器開始於?
-
11. 如何從右側打開Bootstrap模式?
-
12. 從左側離開並從右側進入查看
-
13. 風格選擇顯示左側和右側的值
-
14. 選擇imageview1在左側和imageview2在右側固定
-
15. 左側或右側點擊選擇哪個元素?
-
16. 從右側未知表格中選擇數據,如何?
-
17. 右側或左側一個耳機選擇。播放選擇的耳機(左/右)的聲音
-
18. 右擊開始
-
19. Android NavigationView從右側
-
20. 選擇Verticle名稱以從Maven shell開始
-
21. 如何從第2行開始選擇前3名?
-
22. 你如何選擇從哪裏開始?
-
23. 從第4行開始選擇Word VBA
-
24. 從開始選擇的文本框
-
25. 選擇「相似」組 - 從概率開始?
-
26. 連續選取框從非常從右到左開始
-
27. Ios將標籤(歌名)從右側移動到左側?
-
28. MSSQL如何從第三個分隔符的右邊選擇字符串(從右邊開始計算)
-
29. 選擇表名,選擇從
-
30. Highcharts圖應該完全開始到左側,完全向右側結束
最新問題
-
1. 的Javascript爲什麼我可以訪問的功能
-
2. 當瀏覽器導航時,嵌套在ng-click偵聽器中的$ interval被調用
-
3. 從終端打開MySQL
-
4. 滾動不能僅在屏幕中間工作
-
5. 創建帳戶腳本
-
6. 在AJAX調用之後保持div打開?
-
7. 按鈕不會工作
-
8. ValueError:無效文字爲float():2017-03-18 19:22:51-07:00
-
9. 如何保持cmd行顯示控制檯日誌WHILE攪拌機遊戲引擎運行
-
10. 在emacs中使用不同的包存儲庫
-
1. 從右側開始繪製圖形
-
2. 右側的ListGrid選擇
-
3. 所有選擇離開,只能從右側只有在
-
4. 我如何使richTextBox1中的行將從右側開始左側?
-
5. 如何從文本框的右側開始數字輸入?
-
6. slideDown effect()不能從頁面的右側開始
-
7. 在從mysql右側開始3個字符後添加空格
-
8. ImageView從左側開始
-
9. TextView不從左側開始
-
10. JQuery類名選擇器開始於?
回答
你可以動態使用PATINDEX名稱的長度,但它假定的名稱總是格式化一樣。
這裏是一個TSQL選擇的一個例子,這將使選擇您所提供的數據的第一個名字:
來源
2016-09-27 20:01:52 Theo
我用一個函數來拆分CSV串:
用法:
結果:
來源
2016-09-28 12:29:08
由於您的示例在一行中連接了多個值,因此不清楚數據的外觀。
案例1
假設有2分是列
id
和your_table
full_name
。分號;
是有意添加的,用於區分列。在這種情況下,您可以使用功能RIGHT
獲取全名的值。長度將是full_name
減去1的長度,其不包括#
。案例2
如果上面的解決方案是不適合的,讓我們來討論另一種情況。假設
your_table
中有1列content
和3行。分號爲;
的值在content
的值內,需要明確處理。在這種情況下,您可以使用功能SUBSTRING
獲取全名的值。只是焦炭#
的指數後後,全名開始,可以得到該指數使用CHARINDEX (Transact-SQL):來源
2016-09-30 07:33:40
上述解決方案有效!非常感謝你Mincong ..簡單的代碼.. :) – Arsee
好消息@Arsee!我很高興能夠幫助你。你能接受我的回答嗎? –
我如何接受您的答案?對不起,我正在熟悉網站結構。 – Arsee
相關問題