網(wǎng)上有很多關(guān)于pos機(jī)系統(tǒng)維護(hù)a1,SQL Server 根據(jù)文件名稱(chēng)在ERP系統(tǒng)里面獲取門(mén)店名稱(chēng)的知識(shí),也有很多人為大家解答關(guān)于pos機(jī)系統(tǒng)維護(hù)a1的問(wèn)題,今天pos機(jī)之家(www.www690aa.com)為大家整理了關(guān)于這方面的知識(shí),讓我們一起來(lái)看下吧!
本文目錄一覽:
pos機(jī)系統(tǒng)維護(hù)a1
程序代碼園發(fā)文地址:SQL Server 根據(jù)文件名稱(chēng)在ERP系統(tǒng)里面獲取門(mén)店名稱(chēng)-程序代碼園
在工作中遇到,門(mén)店的POS數(shù)據(jù)需要根據(jù)ERP的門(mén)店名稱(chēng)導(dǎo)入到系統(tǒng)里面,之前寫(xiě)的導(dǎo)入方法不是很好,復(fù)制粘貼的工作量太大了(將回傳回來(lái)的POS數(shù)據(jù)文件加上正確的門(mén)店名稱(chēng),中間用特殊標(biāo)志字段“byq”隔開(kāi),雖然已經(jīng)用批處理的辦法批量去修改文件名稱(chēng),但是復(fù)制粘貼的工作量還是很大);還好回傳回來(lái)的POS數(shù)據(jù)文件名稱(chēng)上已經(jīng)有門(mén)店名稱(chēng)的關(guān)鍵信息;
問(wèn)題描述:之前的導(dǎo)入程序,需要提前處理文件上的門(mén)店名稱(chēng),但是工作量太大了(復(fù)制,粘貼)
解決思路:利用SQL Server 工具處理,把文件名稱(chēng)批量讀取出來(lái)后導(dǎo)入數(shù)據(jù)庫(kù)里面,結(jié)合ERP系統(tǒng)里面的門(mén)店信息表,取最相似的門(mén)店名稱(chēng)。
技術(shù)要點(diǎn):1、批量獲取文件名稱(chēng)
2、獲取相似度最高的方法
3、文件名稱(chēng)中會(huì)有一些多余的數(shù)據(jù)干擾判斷的處理方法
4、通過(guò)文件名稱(chēng)獲取相似度最高的方法
5、循環(huán)通過(guò)文件名稱(chēng)獲取相似度最高的門(mén)店名稱(chēng)
6、批量更新文件名稱(chēng)
第一步:1、批量獲取文件名稱(chēng)用批處理的命令,獲取文件名稱(chēng)在一個(gè)Excel表格里面,代碼如下:
執(zhí)行批處理的文件:readFileName.bat;處理后的結(jié)果放到Excel文件中:readFileName.xls
dir /b>readFileName.xls第二步:獲取相似度最高的方法
在數(shù)據(jù)庫(kù)里面新建一個(gè)方法“FN_Resemble”,用于比較2個(gè)字符串的相似度(這里就簡(jiǎn)認(rèn)為:字符串1中的字符在字符串2出現(xiàn)的次數(shù),出現(xiàn)的越多越相似,網(wǎng)上參考寫(xiě)法),該方法返回相似度,代碼如下:
---兩個(gè)字段簡(jiǎn)單相似ALTER FUNCTION [dbo].[FN_Resemble] (@Cloumna NVARCHAR(MAX), @Cloumnb NVARCHAR(MAX) )RETURNS FLOATASBEGIN DECLARE @num FLOAT,@len int SET @Cloumna=ISNULL(@Cloumna,0) SET @Cloumnb=ISNULL(@Cloumnb,0) SET @len=1 SET @num=0 WHILE(LEN(@Cloumna)<>0 AND LEN(@CloumnB)<>0) BEGIN WHILE(@len<=LEN(@Cloumna)) BEGIN DECLARE @a NVARCHAR(4) SET @a='' SET @a=SUBSTRING(@Cloumna,@len,1) IF(CHARINDEX(@a,@CloumnB)>0) BEGIN SET @num=@num+1 END SET @len=@len+1 END SET @num=@num*1.0/LEN(@Cloumna) BREAK END RETURN @numEND第三步:文件名稱(chēng)中會(huì)有一些多余的數(shù)據(jù)干擾判斷的處理方法
在數(shù)據(jù)庫(kù)里面新建一個(gè)方法“fn_getSimpleFilename”,將文件名稱(chēng)里面干擾獲取最高相似度的信息全部處理掉,這里用到的是替換,代碼如下:
ALTER FUNCTION [dbo].[fn_getSimpleFilename](@FileName varchar(200))RETURNS varchar(200)ASBEGIN set @FileName = REPLACE(@FileName, '1', '')set @FileName = REPLACE(@FileName, '2', '')set @FileName = REPLACE(@FileName, '3', '')set @FileName = REPLACE(@FileName, '4', '')set @FileName = REPLACE(@FileName, '5', '')set @FileName = REPLACE(@FileName, '6', '')set @FileName = REPLACE(@FileName, '7', '')set @FileName = REPLACE(@FileName, '8', '')set @FileName = REPLACE(@FileName, '9', '')set @FileName = REPLACE(@FileName, '0', '')set @FileName = REPLACE(@FileName, '年', '')set @FileName = REPLACE(@FileName, '月', '')set @FileName = REPLACE(@FileName, '日', '')set @FileName = REPLACE(@FileName, '份', '')set @FileName = REPLACE(@FileName, '銷(xiāo)量', '')set @FileName = REPLACE(@FileName, '集鑫隆', '')set @FileName = REPLACE(@FileName, '紙業(yè)', '')set @FileName = REPLACE(@FileName, '店', '')set @FileName = REPLACE(@FileName, '一', '')set @FileName = REPLACE(@FileName, '二', '')set @FileName = REPLACE(@FileName, '三', '')set @FileName = REPLACE(@FileName, '線(xiàn)', '')set @FileName = REPLACE(@FileName, '商品', '')set @FileName = REPLACE(@FileName, '銷(xiāo)售', '')set @FileName = REPLACE(@FileName, '匯總', '')set @FileName = REPLACE(@FileName, '報(bào)表', '')set @FileName = REPLACE(@FileName, '毛利', '')set @FileName = REPLACE(@FileName, '明細(xì)', '')set @FileName = REPLACE(@FileName, '超市', '')set @FileName = REPLACE(@FileName, '集', '')set @FileName = REPLACE(@FileName, '類(lèi)', '')set @FileName = REPLACE(@FileName, '家清', '')set @FileName = REPLACE(@FileName, '紙品', '')set @FileName = REPLACE(@FileName, '統(tǒng)計(jì)', '')set @FileName = REPLACE(@FileName, '數(shù)據(jù)', '')set @FileName = REPLACE(@FileName, 'POS', '')set @FileName = REPLACE(@FileName, '化妝品', '')set @FileName = REPLACE(@FileName, '(', '')set @FileName = REPLACE(@FileName, ')', '')set @FileName = REPLACE(@FileName, '-', '')set @FileName = REPLACE(@FileName, '_', '')set @FileName = REPLACE(@FileName, ' ', '')set @FileName = REPLACE(@FileName, '.xls', '')set @FileName = REPLACE(@FileName, '.', '') RETURN @FileNameEND第四步:通過(guò)文件名稱(chēng)獲取相似度最高的方法
在寫(xiě)一個(gè)方法“fn_getSimilarity”,通過(guò)該方法循環(huán)上一步方法將文件名稱(chēng)和ERP門(mén)店名稱(chēng)比較,最終獲取相似度的門(mén)店名稱(chēng),返回門(mén)店名稱(chēng),代碼如下:
-- 獲取文件名稱(chēng)和門(mén)店名稱(chēng)匹配度最高的ALTER FUNCTION [dbo].[fn_getSimilarity](@FileName varchar(200),@FDeptName varchar(200))RETURNS varchar(200)ASBEGIN declare @FCustomerName VARCHAR(200)-- 根據(jù)分公司取門(mén)店名稱(chēng) declare @c_tbd_Customer table(id int IDENTITY,FCustomerName VARCHAR(200),Similarity float(10))insert into @c_tbd_Customer(FCustomerName)select FCustomerName from c_tbd_Customer_ERP where FDeptName = @FDeptNameDECLARE @count intselect @count = (select count(*) from @c_tbd_Customer)-- 獲取相似度最高的門(mén)店名稱(chēng)declare @i int,@FCustName VARCHAR(200),@Similarity float(10)set @i = 1while @i< @count + 1-- 拼接sqlbeginset @FCustName = (select FCustomerName from @c_tbd_Customer where id = @i)set @Similarity = (SELECT dbo.FN_Resemble(@FileName,@FCustName))update @c_tbd_Customer set Similarity = @Similarity where id = @iset @i = @i + 1endset @FCustomerName = (select top 1 FCustomerName from @c_tbd_Customer order by Similarity desc) RETURN @FCustomerNameEND第五步:循環(huán)通過(guò)文件名稱(chēng)獲取相似度最高的門(mén)店名稱(chēng)
新建一個(gè)存儲(chǔ)過(guò)程,將前面通過(guò)批處理獲取到的文件導(dǎo)入數(shù)據(jù)庫(kù)中,循環(huán)執(zhí)行上一步的方法獲取文件名稱(chēng)對(duì)應(yīng)的最高相似度的門(mén)店名稱(chēng),返回每個(gè)文件名稱(chēng)對(duì)應(yīng)的最高相似度的門(mén)店名稱(chēng),代碼如下:
ALTER PROCEDURE [dbo].[a_jxl_getSimilarity]@FDeptName varchar(200)ASBEGINset nocount on-- 刪除無(wú)效數(shù)據(jù)delete a_jxl_FileName_FCustomerName where FileName is nullcreate table #message(id int IDENTITY, message NVARCHAR (255), flag varchar(255))create table #a_jxl_FileName_FCustomerName(id int IDENTITY, FileName NVARCHAR (255), SimpleFilename NVARCHAR (255), FCustomerName NVARCHAR (255))insert into #a_jxl_FileName_FCustomerName(FileName)select FileName from a_jxl_FileName_FCustomerNameDECLARE @count int,@i int,@FileName VARCHAR(200)select @count = (select count(*) from a_jxl_FileName_FCustomerName)-- 獲取處理過(guò)的文件名稱(chēng)declare @SimpleFilename VARCHAR(200)set @i = 1while @i< @count + 1-- 拼接sqlbeginset @FileName = (select FileName from #a_jxl_FileName_FCustomerName where id = @i)set @SimpleFilename = (SELECT dbo.fn_getSimpleFilename (@FileName))update #a_jxl_FileName_FCustomerName set SimpleFilename = @SimpleFilename where id = @iset @i = @i + 1end-- 獲取相似度最高的客戶(hù)名稱(chēng)declare @FCustomerName VARCHAR(200)set @i = 1while @i< @count + 1-- 拼接sqlbeginset @SimpleFilename = (select SimpleFilename from #a_jxl_FileName_FCustomerName where id = @i)set @FCustomerName = (SELECT dbo.fn_getSimilarity (@SimpleFilename,@FDeptName))update #a_jxl_FileName_FCustomerName set FCustomerName = @FCustomerName where id = @iset @i = @i + 1endselect id,FileName,FCustomerName,SimpleFilename from #a_jxl_FileName_FCustomerNamedelete a_jxl_FileName_FCustomerNamedrop table #messagedrop table #a_jxl_FileName_FCustomerNameset nocount offEND第六步:批量更新文件名稱(chēng)
將上一步的結(jié)果,文件名稱(chēng)和門(mén)店名稱(chēng),復(fù)制粘貼到第一步新建的Excel文件中,寫(xiě)Excel公式形成批處理命令,公式如下:
="ren "&A1&" "&B1&"byq"&A1
將形成批處理命令,復(fù)制粘貼到批處理文件“WrightNewFileName.bat”中,保存,雙擊執(zhí)行批處理就可以批量更新文件名稱(chēng)
程序代碼園發(fā)文地址:SQL Server 根據(jù)文件名稱(chēng)在ERP系統(tǒng)里面獲取門(mén)店名稱(chēng)-程序代碼園
以上就是關(guān)于pos機(jī)系統(tǒng)維護(hù)a1,SQL Server 根據(jù)文件名稱(chēng)在ERP系統(tǒng)里面獲取門(mén)店名稱(chēng)的知識(shí),后面我們會(huì)繼續(xù)為大家整理關(guān)于pos機(jī)系統(tǒng)維護(hù)a1的知識(shí),希望能夠幫助到大家!
