SQL Server:将列的值解析为5列

时间:2016-04-12 15:55:38

标签: sql sql-server parsing

我在表格中有以下列。

daily;1;21/03/2015;times;10
daily;1;01/02/2016;times;8
monthly;1;01/01/2016;times;2
weekly;1;21/01/2016;times;4

如何通过;分隔符将其解析为不同的列?

1 个答案:

答案 0 :(得分:-1)

一种方法是将其拉入pandas,用分号分隔,然后将其放回SQL Server。请参阅下面的测试示例。

测试数据设置

enter image description here

CODE

import sqlalchemy as sa
import urllib
import pandas as pd


server = 'yourserver'

read_database = 'db_to_read_data_from'
write_database = 'db_to_write_data_to'

read_tablename = 'table_to_read_from'
write_tablename = 'table_to_write_to'

read_params = urllib.quote_plus("DRIVER={SQL Server};SERVER="+server+";DATABASE="+read_database+";TRUSTED_CONNECTION=Yes")
read_engine = sa.create_engine("mssql+pyodbc:///?odbc_connect=%s" % read_params)

write_params = urllib.quote_plus("DRIVER={SQL Server};SERVER="+server+";DATABASE="+write_database+";TRUSTED_CONNECTION=Yes")
write_engine = sa.create_engine("mssql+pyodbc:///?odbc_connect=%s" % write_params)

#Read from SQL into DF
Table_DF = pd.read_sql(read_tablename, con=read_engine)
#Delimit by semicolon
parsed_DF = Table_DF['string_column'].apply(lambda x: pd.Series(x.split(';')))
#write DF back to SQL
parsed_DF.to_sql(write_tablename,write_engine,if_exists='append')

RESULT enter image description here