我有一張表,其中包含留在特定位置的家庭成員的詳細信息。由於這些是政府數據,因此有很多錯誤。就像在'houseno'一欄中,有兩個值'Ti 303'和'303'是相同的門牌號碼。我想比較SQL Server中同一列中的字母數字字符串
最後,我想Ti 303更新爲'303'。 (因爲這些是同住的家庭成員)
同樣,'P-101'和'P/101'是同一個houseno's,我希望它被轉換爲'P-101'或'P/101' 。我嘗試了差別,子串等,但現在使用我。請幫忙!
我有一張表,其中包含留在特定位置的家庭成員的詳細信息。由於這些是政府數據,因此有很多錯誤。就像在'houseno'一欄中,有兩個值'Ti 303'和'303'是相同的門牌號碼。我想比較SQL Server中同一列中的字母數字字符串
最後,我想Ti 303更新爲'303'。 (因爲這些是同住的家庭成員)
同樣,'P-101'和'P/101'是同一個houseno's,我希望它被轉換爲'P-101'或'P/101' 。我嘗試了差別,子串等,但現在使用我。請幫忙!
您應該使用REPLACE
命令。對於兩個例子給出如下,你可以硬編碼:
select REPLACE('Ti 303','Ti ','')
select REPLACE('P-101','P-','P/')
你會在你的UPDATE
命令中使用REPLACE
而不是作爲一個SELECT
明顯。
如果你有一個字符串列表替換列中的更新,那麼你可以把它們放到一個表中。然後在您的REPLACE
命令中使用此命令來替換要替換的字符串模式。
問題是我有數百萬行,它可以是'Ti 303'或'Br 405'或'P/1010'或任何其他東西。因此,不能硬編碼。我一定會製作另一張桌子,這樣我就可以有兩張相同列的表格進行比較。但問題是我無法手動從這樣一個大型數據庫中選擇所有的字符串。我正在尋找可以檢測到模式並相應更改的東西。 – user3077610
你只需要去掉字符來比較內容?
CREATE FUNCTION dbo.FN_GetNumberPart (@strMixedString VARCHAR(200))
RETURNS VARCHAR(200)
AS
BEGIN
DECLARE @NumberPart INT
-- Get the next non numeric character position
SET @NumberPart = PATINDEX('%[^0-9]%', @strMixedString)
-- While there are non numeric characters remaining
WHILE @NumberPart > 0
BEGIN
-- Remove the non numeric character from the string
SET @strMixedString = STUFF(@strMixedString, @NumberPart , 1, '')
-- Get the next non numeric character position
SET @NumberPart = PATINDEX('%[^0-9]%', @strMixedString)
END
-- Spit out the cleansed string
RETURN ISNULL(@strMixedString,0)
END
GO
SELECT dbo.FN_GetNumberPart(HouseNo)
from TblAddresses
更好的選擇是使用SQL CLR fn代替標準UDF,如上面顯示的FN_GetNumberPart。與一般的UDF相比,SQL CLR將會更快更高效。 – Karan
你說得很對。任何想法使用什麼版本? –
@SimonUK SQL Server 2012 – user3077610
發佈您嘗試過的查詢,樣本數據和預期輸出。得到答案的機會會增加。 –
你只是想忽略不是數字的部分嗎?如果數字是第一個呢? –
@ t-clausen.dk我不認爲這很容易,OP明確表示他希望在他的數據中保留「P」或「P /」。他需要對它進行規範化處理,但我認爲規則會變得更加模糊,然後簡單地提取數字。 –