2017-03-06 107 views
0

我正在分解SQL中的一些数据。我们目前使用SQL中的databox来存储数据。例如以下位信息将被存储在名为:{Script.Details01}的数据库中。在SQL中分割数据(分隔一串数据)

{Script.Details01} =先生Ĵ布洛斯和小姐中号布罗格斯

我们正在试图做的是验证我们的数据,但是由于谁进入它手动,我们需要通过两个人的名字,以拉动和他们分成两等部门不同的数据库。例如,{Script.Details02}{Script.Details03}.

由于我们需要验证的数据,我们尝试将它们设置为cols。

"SELECT '{Script.Details01}' as Col1, 
'{Script.Details01}' as Col2, 
'{Script.Details01}' as Col3" 

Col1 Part1 = Item('Col1') Entry(1,'') 

反正我们可以分割数据,让先生Ĵ布罗格斯会进入details02和小姐中号布洛斯将进入03?我们可以存储输入的数据,并将其填入问题,消息或根据答案要求它沿着某条路线走下去。

先生Ĵ布罗格斯和小姐中号布罗格斯 {Script.Details02}{Script.Details03}

P.S.我们不关心“和”,并希望在这之间的一切。 如果我有困惑的人随时让我知道,我会尽力而且更清楚:)

+0

什么标准你想拆分的数据?例如,如果它的Mr-> Col 2,如果它的Miss - > Col 3. –

+0

说实话,我认为我们只需要首先拆分数据。例如 Mr J Bloggs =进入{Script.Details02} Miss K Bloggs =进入{Script.Details03} 这些将从视图中拉出并显示为例如。 J博格斯先生和K博格斯小姐。 所以我认为重要的是先拆分它,而不是分割成更多的列? – SQLeon

回答

0

这是一个可能的解决方案。这并不是最简洁,最简洁的编写方式,您需要修改这些内容以处理表名,目标列名/数据库等,但它应该为您提供一个很好的起点。请记住,如果您的数据输入人员对输入对名称的方式不完全一致,那么您将遇到麻烦。您可能需要使用更复杂的技术来清理剩余的信息。

SELECT 
LEFT({Script.Details01}, CHARINDEX(' and ', {Script.Details01})) AS FirstName, 
RIGHT({Script.Details01}, (CHARINDEX(' and ', {Script.Details01}) + 5)) AS SecondName 
FROM MyTable 

见关于CHARINDEX和左,右功能这些文章以了解更多信息:

https://docs.microsoft.com/en-us/sql/t-sql/functions/charindex-transact-sql

https://social.technet.microsoft.com/wiki/contents/articles/17948.t-sql-right-left-substring-and-charindex-functions.aspx