我有以下格式的行條目:獲取在字符串數據中SQL
位置= [數];這=那;富=巴;
[數字]以上可以從1 ...無窮大。所以我需要將[number]拆分出來用於另一個select語句where子句。 Site = [number]始終位於字符串的開頭,數據總是用分號分隔。
我有以下格式的行條目:獲取在字符串數據中SQL
位置= [數];這=那;富=巴;
[數字]以上可以從1 ...無窮大。所以我需要將[number]拆分出來用於另一個select語句where子句。 Site = [number]始終位於字符串的開頭,數據總是用分號分隔。
SELECT SUBSTRING(col, 1, CHARINDEX(col,';'))
declare @t nvarchar(100) = 'Site=230;this=that;foo=bar;';
select convert(int, substring(@t,6, charindex(';',@t,0)-6))
你爲什麼要存儲在該格式的數據庫中的數據?將其拆分爲多個列,以便您可以執行有意義的查詢。
+1:這個特殊的問題應該在更高的層次上解決:數據模型。 – BalusC 2009-11-05 23:14:36
這就是供應商的做法。我告訴他們這很糟糕,但我現在必須處理它。 – user204265 2009-11-06 01:52:32
-1這不是一個有用的答案 – 2010-02-12 22:27:43
您可以用字符串這樣玩:
declare @tx as nvarchar(100)
set @tx = 'Site=[number];this=that;foo=bar;'
print substring(
@tx,
CHARINDEX('[', @tx)+1,
CHARINDEX(']',@tx)-CHARINDEX('[',@tx)-1)
希望這有助於。
我沒有可用的MS SQL Server嘗試了這一點,但你嘗試過類似
選擇 場 轉換(BIGINT,子(場,6))作爲thenum 從 thetable 其中 條件=東西
其中字段是包含場現場= [數字]的名稱; ...
理論進入該子串會剝離現場=關閉開始,並將 將(希望)轉換數字部分,並從分號開始忽略其餘文本。
它可能會或可能不會工作。如果不是,你可能需要寫一個精心製作的函數。
該字符串操作邏輯是在select子句還是where子句中進行?如果發生在where子句中,我會考慮重構數據庫模式,因爲您不太可能獲得良好的性能。 – Asaph 2009-11-05 23:07:36