如果你是指斷行的資料拆成兩個欄位的話...
你看看@@
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
謝謝,這樣可以了~~
謝謝,這樣可以了~~
你好,請問一下:執行的時候出現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'
謝謝!!
我改好了,感恩~~
會出現 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://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))