2016-12-07 71 views
0

我想爲下面的代碼的profileapplication創建計算列。基於函數的計算列

Substring(Substring(P.propertyvaluesstring, 
          Charindex('ProfileApplication', P.propertyvaluesstring), 
          Charindex('</ProfileApplication',P.propertyvaluesstring) - 
          Charindex('ProfileApplication',P.propertyvaluesstring)), 
          Charindex('>', Substring(P.propertyvaluesstring, 
          Charindex('ProfileApplication',P.propertyvaluesstring), 
          Charindex('</ProfileApplication',P.propertyvaluesstring) - Charindex('ProfileApplication',P.propertyvaluesstring))) 
      + 1, Len(Substring(P.propertyvaluesstring, 
          Charindex('ProfileApplication', 
          P.propertyvaluesstring), 
          Charindex('</ProfileApplication', 
          P.propertyvaluesstring) - 
          Charindex('ProfileApplication', 
          P.propertyvaluesstring)))) AS 
      ProfileApplication,  

再者,我想使用計算列使用ProfileApplication到其他查詢。我不確定,但會有可能嗎?

SUBSTRING 
     (SUBSTRING 
       (P.ProfileApplication, 
        CHARINDEX('RequisitionStartDate', P.ProfileApplication), 
        CHARINDEX('</RequisitionStartDate',P.ProfileApplication) - 
        CHARINDEX('RequisitionStartDate',P.ProfileApplication) 
        ), 
        CHARINDEX('>', SUBSTRING(P.ProfileApplication, 
        CHARINDEX('RequisitionStartDate', P.ProfileApplication), 
        CHARINDEX('</RequisitionStartDate',P.ProfileApplication) - 
        CHARINDEX('RequisitionStartDate', P.ProfileApplication))) + 1, 
        LEN(SUBSTRING(P.ProfileApplication, 
        CHARINDEX('RequisitionStartDate',P.ProfileApplication), 
        CHARINDEX('</RequisitionStartDate',P.ProfileApplication) - 
        CHARINDEX('RequisitionStartDate',P.ProfileApplication)))) 
+0

你可以包括你的表定義嗎? –

+0

用你給我們的東西來回答這個問題是不可能的。一般來說,我們可以使用字符串函數在表**中創建計算列**。但是在你給我們的東西中,有一些像'P.propertyvaluesstring'這樣的東西讓我認爲你想要引用其他表中的列,在我所知的範圍內,除非你創建一個表,否則不應該這樣做視圖。但這是一個不同的概念。 – DVT

回答

1

假設propertyvaluesstring列存在於與計算列相同的表中。

這是你需要做什麼:

ALTER TABLE <your table name here> 
ADD ProfileApplication AS SUBSTRING(SUBSTRING(propertyvaluesstring, CHARINDEX('ProfileApplication', propertyvaluesstring), CHARINDEX('</ProfileApplication', propertyvaluesstring)-CHARINDEX('ProfileApplication', propertyvaluesstring)), CHARINDEX('>', SUBSTRING(propertyvaluesstring, CHARINDEX('ProfileApplication', propertyvaluesstring), CHARINDEX('</ProfileApplication', propertyvaluesstring)-CHARINDEX('ProfileApplication', propertyvaluesstring)))+1, LEN(SUBSTRING(propertyvaluesstring, CHARINDEX('ProfileApplication', propertyvaluesstring), CHARINDEX('</ProfileApplication', propertyvaluesstring)-CHARINDEX('ProfileApplication', propertyvaluesstring)))) 

注意計算列的某個時候產生不利影響性能,因此將它們時我會很謹慎。