2011-10-10 64 views
0

如何創建用於替換文本塊中間的社會安全號碼的查詢?用於替換數據庫中SSM的SQL語句

表是這樣的:

column1  column2 
11   text SSN more text 

攻擊核潛艇是不是所有格式相同或者,有些是類似這樣的:XXX-XX-XXXX有的只是一個數字串XXXXXXXX。

+1

如果你能描述了需要遵循的規則,我們可以表達它的SQL爲您服務。我們需要您想要執行的精確規則。 (注意:例如,第二個格式示例是8位數字,而不是9)。 – MatBailie

+0

另外,用什麼替換SSN? – jadarnel27

回答

1

如果您想要例如從您的表中編輯SSN#,您可以使用PATINDEX函數來查找SSN#和REPLACE命令以將它們轉換爲隱藏數字的東西。下面是一個例子(注意,此代碼假定只會有一個SSN#在一次的值。如果可能有多個不同的SSN#的,只有第一個會被發現。):

update 
    MyTable 
set 
    Column2 = replace(Column2, 
     case 
      when patindex('% [0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9] %', Column2) <> 0 
       then substring(Column2, patindex('% [0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9] %', Column2) + 1, 11) 
      when patindex('% [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] %', Column2) <> 0 
       then substring(Column2, patindex('% [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] %', Column2) + 1, 9) 
      else '' 
     end, 
     case 
      when patindex('% [0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9] %', Column2) <> 0 
       then 'xxx-xx-xxxx' 
      when patindex('% [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] %', Column2) <> 0 
       then 'xxxxxxxxx' 
      else '' 
     end) 

取樣輸入數據:

1 | text 123-45-6789 more text 
2 | testing 894315466 and blah blah blah 
3 | testing no ssn 348933 result 

樣本輸出:

1 | text xxx-xx-xxxx more text 
2 | testing xxxxxxxxx and blah blah blah 
3 | testing no ssn 348933 result 
+0

哦,這個人像冠軍一樣工作。感謝您的快速回復。你是一位神。 – Ben

+0

@Ben:很高興幫助。請確保您注意到我上面關於此代碼的註釋只會匹配**第一個**社會安全號碼。所以只要一個字段不包含多個SSN,這應該可以正常工作。如果可能有多個,一個解決方案就是多次運行代碼。 – mellamokb

0

根據您所在領域的文字,假設您試圖將SSNs規範化爲無版式格式,您可以對所有版本進行替換。但是,如果您的SSN嵌套的其他文本可能包含超鏈接,則下面的解決方案將不起作用。它最終會拉出所有的邪惡。

UPDATE tableA 
SET column2 = REPLACE(column2,'-',''); 

否則,你所面對的發現基於關在一排9個數字或3位的SSN,然後是連字符,然後2個數字,一個連字符,然後是四個。這將需要你通過整個領域,標記你的出發點,開始替換和做你的解析工作。