2009-11-05 75 views
0

我有以下格式的行條目:獲取在字符串數據中SQL

位置= [數];這=那;富=巴;

[數字]以上可以從1 ...無窮大。所以我需要將[number]拆分出來用於另一個select語句where子句。 Site = [number]始終位於字符串的開頭,數據總是用分號分隔。

+2

該字符串操作邏輯是在select子句還是where子句中進行?如果發生在where子句中,我會考慮重構數據庫模式,因爲您不太可能獲得良好的性能。 – Asaph 2009-11-05 23:07:36

回答

1
SELECT SUBSTRING(col, 1, CHARINDEX(col,';')) 
2
declare @t nvarchar(100) = 'Site=230;this=that;foo=bar;'; 
select convert(int, substring(@t,6, charindex(';',@t,0)-6)) 
1

你爲什麼要存儲在該格式的數據庫中的數據?將其拆分爲多個列,以便您可以執行有意義的查詢。

+0

+1:這個特殊的問題應該在更高的層次上解決:數據模型。 – BalusC 2009-11-05 23:14:36

+0

這就是供應商的做法。我告訴他們這很糟糕,但我現在必須處理它。 – user204265 2009-11-06 01:52:32

+0

-1這不是一個有用的答案 – 2010-02-12 22:27:43

0

您可以用字符串這樣玩:

declare @tx as nvarchar(100) 
set @tx = 'Site=[number];this=that;foo=bar;' 

print substring(
    @tx, 
    CHARINDEX('[', @tx)+1, 
    CHARINDEX(']',@tx)-CHARINDEX('[',@tx)-1) 

希望這有助於。

0

我沒有可用的MS SQL Server嘗試了這一點,但你嘗試過類似

選擇 場 轉換(BIGINT,子(場,6))作爲thenum 從 thetable 其中 條件=東西

其中字段是包含場現場= [數字]的名稱; ...

理論進入該子串會剝離現場=關閉開始,並將 將(希望)轉換數字部分,並從分號開始忽略其餘文本。

它可能會或可能不會工作。如果不是,你可能需要寫一個精心製作的函數。