第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從SQL Server中的VARCHAR中刪除非數(shù)字字符的最快方法

從SQL Server中的VARCHAR中刪除非數(shù)字字符的最快方法

慕的地8271018 2019-12-12 14:10:37
我正在編寫一個導入實用程序,它將電話號碼用作導入中的唯一鍵。我需要檢查數(shù)據(jù)庫中是否不存在電話號碼。問題在于數(shù)據(jù)庫中的電話號碼可能包含破折號和括號之類的內(nèi)容,也可能包含其他內(nèi)容。我寫了一個刪除這些東西的函數(shù),問題是它很慢,并且數(shù)據(jù)庫中有成千上萬的記錄,并且一次要導入成千上萬的記錄,所以此過程可能會令人難以接受。我已經(jīng)將電話號碼列作為索引。我嘗試使用這篇文章中的腳本:T-SQL trim&nbsp(和其他非字母數(shù)字字符)但這并沒有加快速度。是否有刪除非數(shù)字字符的更快方法?當必須比較10,000到100,000條記錄時,某些性能會很好。無論做什么都需要快速執(zhí)行。更新鑒于人們的回應,我認為我將必須在運行導入實用程序之前清理字段。為了回答我在其中編寫導入實用程序的問題,它是一個C#應用程序。我現(xiàn)在正在將BIGINT與BIGINT進行比較,而無需更改數(shù)據(jù)庫數(shù)據(jù),而我仍然會因為很少的一組數(shù)據(jù)(大約2000條記錄)而對性能造成沖擊。將BIGINT與BIGINT進行比較會降低速度嗎?我已盡我所能優(yōu)化了應用程序的代碼方面(刪除了正則表達式,刪除了不必要的數(shù)據(jù)庫調(diào)用)。盡管我無法再將SQL隔離為問題的根源,但我仍然覺得確實如此。
查看完整描述

3 回答

?
MMMHUHU

TA貢獻1834條經(jīng)驗 獲得超8個贊

我可能會誤會,但您有兩組數(shù)據(jù)要從一組中刪除數(shù)據(jù)庫中當前數(shù)據(jù)的字符串,然后在每次導入時都從一組中刪除字符串。


對于更新現(xiàn)有記錄,我只會使用SQL,那只需要發(fā)生一次。


但是,SQL并未針對這種操作進行優(yōu)化,因為您說的是編寫導入實用程序,所以我將在導入實用程序本身而不是在SQL中進行這些更新。這將是更好的性能選擇。您在用什么編寫實用程序?


另外,我可能會完全誤解該過程,因此,如果我偏離基準,我深表歉意。


編輯:

對于初始更新,如果您使用的是SQL Server 2005,則可以嘗試CLR函數(shù)。這是一個使用正則表達式的快速方法。不確定性能如何進行比較,我自己從未使用過此功能,除非現(xiàn)在進行快速測試。


using System;  

using System.Data;  

using System.Text.RegularExpressions;  

using System.Data.SqlClient;  

using System.Data.SqlTypes;  

using Microsoft.SqlServer.Server;  


public partial class UserDefinedFunctions  

{  

    [Microsoft.SqlServer.Server.SqlFunction]  

    public static SqlString StripNonNumeric(SqlString input)  

    {  

        Regex regEx = new Regex(@"\D");  

        return regEx.Replace(input.Value, "");  

    }  

};  

部署之后,可以使用以下命令進行更新:


UPDATE table SET phoneNumber = dbo.StripNonNumeric(phoneNumber)



查看完整回答
反對 回復 2019-12-13
?
慕萊塢森

TA貢獻1810條經(jīng)驗 獲得超4個贊

我看到了帶有T-SQL代碼和PATINDEX的解決方案。我喜歡 :-)


CREATE Function [fnRemoveNonNumericCharacters](@strText VARCHAR(1000))

RETURNS VARCHAR(1000)

AS

BEGIN

    WHILE PATINDEX('%[^0-9]%', @strText) > 0

    BEGIN

        SET @strText = STUFF(@strText, PATINDEX('%[^0-9]%', @strText), 1, '')

    END

    RETURN @strText

END




查看完整回答
反對 回復 2019-12-13
?
隔江千里

TA貢獻1906條經(jīng)驗 獲得超10個贊

replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(string,'a',''),'b',''),'c',''),'d',''),'e',''),'f',''),'g',''),'h',''),'i',''),'j',''),'k',''),'l',''),'m',''),'n',''),'o',''),'p',''),'q',''),'r',''),'s',''),'t',''),'u',''),'v',''),'w',''),'x',''),'y',''),'z',''),'A',''),'B',''),'C',''),'D',''),'E',''),'F',''),'G',''),'H',''),'I',''),'J',''),'K',''),'L',''),'M',''),'N',''),'O',''),'P',''),'Q',''),'R',''),'S',''),'T',''),'U',''),'V',''),'W',''),'X',''),'Y',''),'Z','')*1 AS string,


:)




查看完整回答
反對 回復 2019-12-13
  • 3 回答
  • 0 關注
  • 579 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號