2015-06-15 30 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))) 
相关问题