2009-11-05 76 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 其中 条件=东西

其中字段是包含场现场= [数字]的名称; ...

理论进入该子串会剥离现场=关闭开始,并将 将(希望)转换数字部分,并从分号开始忽略其余文本。

它可能会或可能不会工作。如果不是,你可能需要写一个精心制作的函数。