2015-06-15 46 views
0

我使用的是剝離字符串的RIGHT(LEFT())方法,因爲每個字符都需要放入其自己的持有者中,以便我可以訪問它並將其用於報告(每個字符需要位於其中自己的盒子出於某種原因)。將字符串分隔成特定的臨時表colums

通常有16個字符,但爲了節省空間和減少重複我已經減少了代碼。

我想要做的是將分離的字符值放入臨時表的相應列 - 這是如何最好地實現?

我沒有其他使用這個數據曾經使用我會摧毀它。

代碼

CREATE table #StringSeparate 
(
col1 varchar(1), 
col2 varchar(1), 
col3 varchar(1), 
col4 varchar(1), 
col5 varchar(1), 
col6 varchar(1), 
col7 varchar(1), 
col8 varchar(1), 
) 

declare @string varchar(16) 
set @string = 'tpg22052015-1204' 

SELECT 
LEFT(@string,1), 
RIGHT(LEFT(@string,2),1), 
RIGHT(LEFT(@string,3),1), 
RIGHT(LEFT(@string,4),1), 
RIGHT(LEFT(@string,5),1), 
RIGHT(LEFT(@string,6),1), 
RIGHT(LEFT(@string,7),1), 
RIGHT(LEFT(@string,8),1) 
INTO 
#String Separate 
+0

你的問題還不清楚,你是否試圖將每個字符串放入創建的臨時表的列中?另外,它看起來像你的代碼被切斷了,還有更多嗎? – SQLHound

+0

道歉,是的,這正是我想要做的,我會更新Q – SelrekJohn

回答

1

只是不喜歡它:

CREATE table #StringSeparate 
(
col1 varchar(1), 
col2 varchar(1), 
col3 varchar(1), 
col4 varchar(1), 
col5 varchar(1), 
col6 varchar(1), 
col7 varchar(1), 
col8 varchar(1), 
) 
INSERT INTO #StringSeparate 
SELECT 
LEFT(@string,1), 
RIGHT(LEFT(@string,2),1), 
RIGHT(LEFT(@string,3),1), 
RIGHT(LEFT(@string,4),1), 
RIGHT(LEFT(@string,5),1), 
RIGHT(LEFT(@string,6),1), 
RIGHT(LEFT(@string,7),1), 
RIGHT(LEFT(@string,8),1) 

還是不要創建臨時表,並做到這一點:

SELECT 
LEFT(@string,1) col1, 
RIGHT(LEFT(@string,2),1) col2, 
RIGHT(LEFT(@string,3),1) col3, 
RIGHT(LEFT(@string,4),1) col4, 
RIGHT(LEFT(@string,5),1) col5, 
RIGHT(LEFT(@string,6),1) col6, 
RIGHT(LEFT(@string,7),1) col7, 
RIGHT(LEFT(@string,8),1) col8 
INTO 
#StringSeparate 

它會自動創建一個臨時表,因爲INTO創建表。

+0

第二部分是我正在尋找的,但是當我嘗試它時發現錯誤(語法變化),謝謝! – SelrekJohn

1

根據您RDBMS我想我可能更喜歡SUBSTRING:

INSERT INTO #StringSeparate 
SELECT 
LEFT(@string,1), 
SUBSTRING(@string,2,1), 
SUBSTRING(@string,3,1), 
... 
RIGHT(@string,1) 
+0

RIIGHT(LEFT())'上的子串有什麼好處? – SelrekJohn

+0

對我來說,這是更清楚,我更喜歡1個精確的函數調用兩個鏈接在一起。性能明智,它可能不會有任何區別。事實上,我讀過這裏(http://stackoverflow.com/questions/18892208/substring-vs-left-in-sql-server)LEFT被轉換爲SQL Server中的SUBSTRING。 –

+0

酷 - 感謝信息。 – SelrekJohn

1

我做你的發言的一大插入。

INSERT INTO #StringSeparate 
VALUES 
((LEFT(@string,1)), 
(RIGHT(LEFT(@string,2),1)), 
(RIGHT(LEFT(@string,3),1)), 
(RIGHT(LEFT(@string,4),1)), 
(RIGHT(LEFT(@string,5),1)), 
(RIGHT(LEFT(@string,6),1)), 
(RIGHT(LEFT(@string,7),1)), 
(RIGHT(LEFT(@string,8),1))) 
相關問題