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. TextView不從左側開始
-
2. ImageView從左側開始
-
3. JQuery類名選擇器開始於?
-
4. 如何從右側打開Bootstrap模式?
-
5. 左側或右側點擊選擇哪個元素?
-
6. 風格選擇顯示左側和右側的值
-
7. 從右側未知表格中選擇數據,如何?
-
8. Android NavigationView從右側
-
9. 你如何選擇從哪裏開始?
-
10. 從開始選擇的文本框
-
11. 連續選取框從非常從右到左開始
-
12. MSSQL如何從第三個分隔符的右邊選擇字符串(從右邊開始計算)
-
13. Bootstrap-選擇始終打開
-
14. 如何讓NERDTree始終在右側打開?
-
15. SlideMenuController左側菜單顯示從開始
-
16. 動畫從右側和左側查看
-
17. 右加入不會從右側表
-
18. 如何從屏幕右側開始將`ListView`項目轉換爲wrap_content?
-
19. Java Swing;我該如何製作,讓程序從屏幕的最右側開始?
-
20. 圖表js 2中如何從右側開始Y軸線爲負值?
-
21. 如何從右側開始將背景位置設置爲絕對距離?
-
22. 當累計結果符合條件時,Scala Split從右側開始順序
-
23. JSoup選擇器是從右到左還是從左到右選擇?
-
24. Highcharts tooltip始終在光標的右側
-
25. 如何實現從右側
-
26. 搜索從右側切換
-
27. jquery從右側滑出div
-
28. jPanelMenu - 從右側滑入
-
29. 從右側滑入div
-
30. jQuery:只從右側滑入
最新問題
-
1. Python對象混入注射
-
2. 批處理文件無法正常工作,除非我正在觀看
-
3. 司 - SQL
-
4. 在C++ Builder中的服務應用程序6
-
5. Spring REST:適用於嵌套XML請求正文的構造函數嗎?
-
6. 在.Net中是否存在僅支持排序值的集合。鑰匙不需要?
-
7. Python:將令牌存儲在內存中
-
8. 由於設置`set_verify_mode(boost :: asio :: ssl :: verify_none)導致的安全後果;`
-
9. 如何使用UNIX中的數據庫獲取的值創建平面文件?
-
10. 嘗試使用單元格的值創建的範圍使用VBA進行復制和粘貼
-
1. TextView不從左側開始
-
2. ImageView從左側開始
-
3. JQuery類名選擇器開始於?
-
4. 如何從右側打開Bootstrap模式?
-
5. 左側或右側點擊選擇哪個元素?
-
6. 風格選擇顯示左側和右側的值
-
7. 從右側未知表格中選擇數據,如何?
-
8. Android NavigationView從右側
-
9. 你如何選擇從哪裏開始?
-
10. 從開始選擇的文本框
回答
你可以動態使用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
相關問題