之前

2016-03-02 68 views
0

選擇已知的東西和空間之間的字符串表列我有這樣的數據(MSSQL 2005):之前

... something... 7000mAh ... something 

... something... 610mAh ... something 

的一點是,我有毫安前2,3 4個甚至5位數。 我想選擇所有的數字,包括mAh,比如610mAh,7000mAh等等。

有人能指出我正確的方向嗎?

+2

請將您的問題標記爲您正在使用的數據庫。 –

+0

您正在使用哪種RDBMS?你能給出一些確切的數據和預期產出的例子嗎?你試過什麼了? –

+3

請注意,數據庫應該存儲「數據」,而不是「信息」。通常在其中包含多個數據的句子或字符串應該位於不同的列中。例如「蘋果紅」應該有兩列。帶「紅」的顏色和帶「蘋果」的fruit_name。也許你應該創建一個「mAh」列,並將數字放在裏面,然後從數據庫中選擇它們,並將其他「somethings ...」放在不同的列中。希望是有道理的 – Markinson

回答

0

只要你知道你只會有這些確切的模式,那麼這將工作。正如@Derp在評論中所說的那樣,最好的辦法是將數據從字符串中嵌入 - 可能使用下面的代碼 - 更加永久。

DECLARE @test TABLE (my_string VARCHAR(20)) 

INSERT INTO @test (my_string) 
VALUES 
    ('test 12345mAh test;'), 
    ('test 1234mAh test;'), 
    ('test 123mAh test;') 


SELECT 
    CASE 
     WHEN PATINDEX('%[0-9][0-9][0-9][0-9][0-9]mAh%', my_string) > 0 
      THEN SUBSTRING(my_string, PATINDEX('%[0-9][0-9][0-9][0-9][0-9]mAh%', my_string), 8) 
     WHEN PATINDEX('%[0-9][0-9][0-9][0-9]mAh%', my_string) > 0 
      THEN SUBSTRING(my_string, PATINDEX('%[0-9][0-9][0-9][0-9]mAh%', my_string), 7) 
     WHEN PATINDEX('%[0-9][0-9][0-9]mAh%', my_string) > 0 
      THEN SUBSTRING(my_string, PATINDEX('%[0-9][0-9][0-9]mAh%', my_string), 6) 
     WHEN PATINDEX('%[0-9][0-9]mAh%', my_string) > 0 
      THEN SUBSTRING(my_string, PATINDEX('%[0-9][0-9]mAh%', my_string), 5) 
     ELSE NULL 
    END 
FROM 
    @test 
+0

這是工作,它正在選擇我的目標字符串正確。謝謝! – a3des