10min速通Matlab調(diào)用SQL數(shù)據(jù)庫(附代碼)
1. 前言
?今晚在處理連續(xù)采樣數(shù)據(jù)時,得到的數(shù)據(jù)點(diǎn)過多,一列約為200萬個。對于excel來說是無法一次性處理如此多的數(shù)據(jù)。
Excel能夠處理的數(shù)據(jù)量與使用的Excel版本、計(jì)算機(jī)硬件配置、操作系統(tǒng)等因素有關(guān)。根據(jù)微軟官方的建議,Excel的推薦最大行數(shù)為1048576行(即2的20次方),最大列數(shù)為16384列(即2的14次方),最大工作表數(shù)為255個。
此外在處理大數(shù)據(jù)時,Excel可能會出現(xiàn)性能問題,例如運(yùn)行緩慢、停止響應(yīng)、崩潰等。因此,對于大規(guī)模的數(shù)據(jù)處理任務(wù),建議使用專業(yè)的數(shù)據(jù)處理工具和數(shù)據(jù)庫管理系統(tǒng),如SQL Server、Oracle、MySQL等。
?于是今晚探索了一下matlab調(diào)用SQL的操作。

2. 具體配置
配置SQL環(huán)境,具體流程見:https://blog.csdn.net/qq_43884946/article/details/123312148
MATLAB連接SQL:https://blog.csdn.net/Ruins_LEE/article/details/114189099
matlab調(diào)用SQL 代碼實(shí)現(xiàn):
? ? ??
clc
clear all;
% database('myexp','','')
%%matlab與sql交互
datasource = 'myexp'; %前面設(shè)置的數(shù)據(jù)源名稱
?
connA = database(datasource,'yourname','password'); %SQL Server的用戶名和密碼
?
cursorA=exec(connA,'select * from myexp.dbo.Waveform'); %數(shù)據(jù)庫名稱、表名稱
?
% RowLimit = 1000000; % RowLimit為每次讀取的數(shù)據(jù)參數(shù)的行數(shù),默認(rèn)為全部讀取
?
% cursA=fetch(cursorA,RowLimit); % 把數(shù)據(jù)庫中的數(shù)據(jù)讀取到Matlab中——fetch
?
%返回?cái)?shù)據(jù)類型為元包(cell)型,默認(rèn)為CELL型,要通過 cell2mat() 轉(zhuǎn)換格式
?
cursA=fetch(cursorA);
DataA=cursA.Data; %把讀取到的數(shù)據(jù)用變量Data保存.
?
%關(guān)閉連接
close(cursorA);
??
close(connA);
調(diào)用的數(shù)據(jù)庫中的表數(shù)據(jù)保存在DataA變量中(位于工作區(qū))
為了方便,在sql里面我又新建了一段代碼,用于調(diào)用txt文件,具體代碼為:
CREATE TABLE [myexp].[dbo].[table1]
(
? ? [Column1] [nvarchar](50) NULL,
)?
--使用BULK INSERT命令將txt文件中的數(shù)據(jù)插入到表中
BULK INSERT [myexp].[dbo].[table1]
FROM 'E:\exp\Waveform.txt'
WITH (
? ? FIELDTERMINATOR = ',',
? ? ROWTERMINATOR = '\n',
? ? FIRSTROW = 1 --如果txt文件中的第一行包含標(biāo)題,則將此選項(xiàng)設(shè)置為2,以跳過標(biāo)題行
)
--選擇插入的數(shù)據(jù)并驗(yàn)證結(jié)果
SELECT * FROM [myexp].[dbo].[table1]
3. 操作
首先在SQL sever中運(yùn)行代碼導(dǎo)入txt文件,隨后在matlab中導(dǎo)入數(shù)據(jù)庫myexp的200w數(shù)據(jù)
matlab中可以對數(shù)據(jù)進(jìn)行處理
導(dǎo)入excel中方法同理,只要稍微修改上述代碼就行
今天剛接觸SQL sever,還是個小白,有不當(dāng)處請指出,謝謝!有問題歡迎交流
