2016-05-08 5 views
0

ich brauche "Goal Infusionsrate: ###" setzen in seinem eigenen FeldSUBSTRING UND CHARINDEX

Ich versuche, diesen Code Substring (SummaryLine, CHARINDEX ('Infusion:', summaryline), +14) aber es funktioniert nicht.

, Initial Rate: 40, Goal Rate of Infusion: 0, to goal rate in 8 hours 
, Initial Rate: 30, Goal Rate of Infusion: 0, to goal rate in 8 hours 
, Initial Rate: 10, Goal Rate of Infusion: 10, to goal rate in 8 hours, HOLD FOR N/V 
, Initial Rate: 40, Goal Rate of Infusion: 10, to goal rate in 8 hours 
, Initial Rate: 40, Goal Rate of Infusion: 10, to goal rate in 8 hours 
, Initial Rate: 100, Goal Rate of Infusion: 100, to goal rate in 8 hours 
, Initial Rate: 15, Goal Rate of Infusion: 15, to goal rate in 8 hours 
, Initial Rate: 40, Goal Rate of Infusion: 15, to goal rate in 8 hours 
+0

Ihren aktuellen Code zeigen, so können wir es für Sie beheben. –

+0

"es funktioniert nicht" ist keine angemessene Problembeschreibung. – Dai

+0

Substring (SummaryLine, CHARINDEX ('Infusion:', summaryline), + 14) AS NewSummaryField Infusion: 50, Infusion: 55, Infusion: 65, Infusion: 40, Infusion: 70, Infusion: 50, Infusion: 50, Infusion: 40, – user3666224

Antwort

0
SELECT 
    SummaryLine, 
    StartIdx, 
    EndIdx, 
    CONVERT(
     int, 
     SUBSTRING(SummaryLine, StartIdx, EndIdx - StartIdx) 
    ) AS InfusionRate 
FROM (
    SELECT 
     SummaryLine, 
     StartIdx, 
     CHARINDEX(',', summaryLine, StartIdx) AS EndIdx 
    FROM (
     SELECT 
      SummaryLine, 
      CHARINDEX('Infusion:', SummaryLine) + 10 AS StartIdx, 
     FROM 
      SourceTable 
    ) 
) 

Oder als eine einzige Zeile:

SELECT 
    CONVERT(
     int, 
     SUBSTRING(
      SummaryLine, 
      CHARINDEX('Infusion:', summaryLine) + 10, 
      CHARINDEX(
       ',', 
       SummaryLine, 
       CHARINDEX('Infusion:', summaryLine) + 10 
      ) 
     ) 
    ) 
FROM 
    SourceTable 

SQL Sie Ergebnisse zwischenzuspeichern oder Alias ​​nicht zulässt, dass die Expression in einer einzigen SELECT Aussage leider - benötigen Sie entweder eine Unterabfrage verwenden (das erste Beispiel) oder wiederholen Sie den Ausdruck (2. Beispiel).

UPDATE: Ich tat etwas Forschung, könnten Sie CROSS APPLY verwenden StartIdx nur einmal zu berechnen:

SELECT 
    SummaryLine, 
    CONVERT(
     int, 
     SUBSTRING(
      SummaryLine, 
      StartIdx, 
      CHARINDEX(',', summaryLine, StartIdx) - StartIdx 
     ) 
    ) AS InfusionRate 
FROM 
    SourceTable 
    CROSS APPLY (
     SELECT CHARINDEX('Infusion:', summaryLine) + 10 AS StartIdx 
    ) 
+0

konnte ich bekommen – user3666224