iT邦幫忙

0

T-SQL:判斷Enter Key或逗號

各位好

小弟的系統中有一個欄位是nvarchar(250),現在有一個報表需要將這個欄位拆成二段,分段點是第一個Enter Key,請教各位網大該如何在T-SQL中下指令呢?謝謝!!

如果判斷Enter改為判斷','會不會比較好做?謝謝!!

fillano iT邦超人 1 級 ‧ 2018-06-08 10:21:02 檢舉
你是說\n嗎?
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

3
純真的人
iT邦大師 1 級 ‧ 2018-06-08 12:30:38
最佳解答

如果你是指斷行的資料拆成兩個欄位的話...
你看看@@

declare @Tmp table(
	Test nvarchar(250)
)
insert into @Tmp
values('1' + char(13) + char(10) + 'test1')
,('22' + char(13) + char(10) + 'test2')
,('333' + char(13) + char(10) + 'test2')

select * 
,Convert(int,left(Test,CharIndex(char(13),Test) - 1)) as Enter_Key
,right(Test,len(Test) - CharIndex(char(10),Test)) as Enter_Data
from @Tmp

https://ithelp.ithome.com.tw/upload/images/20180608/20061369npvW7R7ap1.png

看更多先前的回應...收起先前的回應...
rogermou iT邦新手 5 級 ‧ 2018-06-08 14:23:41 檢舉

謝謝,這樣可以了~~

rogermou iT邦新手 5 級 ‧ 2018-06-08 14:23:42 檢舉

謝謝,這樣可以了~~

rogermou iT邦新手 5 級 ‧ 2018-06-08 16:44:42 檢舉

你好,請問一下:執行的時候出現error: Invalid length parameter passed to the LEFT or SUBSTRING function.
應該是那一個部份的問題?
我改寫的是這樣:
SELECT CONVERT(NVARCHAR(100),LEFT(SO.ADDRESS,CHARINDEX(CHAR(13),SO.ADDRESS)-1)) AS 'BillTo',
RIGHT(SO.Address,LEN(SO.Address) - CHARINDEX(CHAR(10),SO.Address)) AS 'BillToAds'

謝謝!!

rogermou iT邦新手 5 級 ‧ 2018-06-08 16:48:40 檢舉

我改好了,感恩~~

/images/emoticon/emoticon42.gif

會出現 error: Invalid length parameter passed to the LEFT or SUBSTRING function.

表示你的資料欄位有些沒有Enter Key

在 LEFT(SO.ADDRESS,CHARINDEX(CHAR(13),SO.ADDRESS)-1) 的時候

會是這樣 LEFT(SO.ADDRESS,-1) 因為left函數不接受 參數為 -1 所以就報錯了~

所以你可以加上防呆~保證資料沒有Enter Key時,還是可以正常查詢~

如以下~

declare @Tmp table(
	Test nvarchar(250)
)
insert into @Tmp
values('1' + char(13) + char(10) + 'test1')
,('22' + char(13) + char(10) + 'test2')
,('333' + char(13) + char(10) + 'test3')
,('test4')

select * 
,(
	case when CharIndex(char(13),Test) = 0
	then ''
	else left(Test,CharIndex(char(13),Test) - 1) 
	end
) as Enter_Key
,right(Test,len(Test) - CharIndex(char(10),Test)) as Enter_Data
from @Tmp

https://ithelp.ithome.com.tw/upload/images/20180608/20061369Wz8wSIlKZw.png

rogermou iT邦新手 5 級 ‧ 2018-06-12 13:13:02 檢舉

謝謝~~

3
Homura
iT邦高手 1 級 ‧ 2018-06-08 10:47:31

你可以參考這個
https://dotblogs.com.tw/shadow/2011/07/02/30968
你如果是sql server 2016的話可以用內建函數string_split()
參考這個
https://docs.microsoft.com/zh-tw/sql/t-sql/functions/string-split-transact-sql?view=sql-server-2017
分割符號我覺得用','或'|'會比Enter Key好

我剛剛看到另一篇更好的不用寫成函數
https://social.msdn.microsoft.com/Forums/zh-TW/8f273325-7b57-451e-8f66-11ef3162010f/2035129992sql3548627861209982110623383200182183938988?forum=240

自己有測試一下還蠻好用的

Declare @str As varchar(100)
Set @str='123*456'
SELECT 
	SUBSTRING(@str, 1, CHARINDEX('*', @str) - 1),
	SUBSTRING(@str, CHARINDEX('*', @str) + 1, LEN(@str) - CHARINDEX('*', @str))
	
rogermou iT邦新手 5 級 ‧ 2018-06-08 14:24:49 檢舉

我剛剛試過,可以用來判斷',',謝謝!!

我要發表回答

立即登入回答