2016-05-08 16 views
0

私は "注入の目標レート:###" 配置する必要があります:14 +、summaryline)私は(SummaryLine、CHARINDEX( '・インフュージョン' をサブストリングこのコードをしようとしているそれ自身のフィールドにSUBSTRINGとCHARINDEX

を)しかし、それは動作していません。

, 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

は、あなたの現在のコードを表示するので、私たちはあなたのためにそれを修正することができます。 –

+0

"それは動作していません"とは適切な問題の説明ではありません。 – Dai

+0

サブストリング(SummaryLine、CHARINDEX( '注入:'、summaryline)、+ 14)NewSummaryField注入として:50、 注入:55、 注入:65、 注入:40、 注入:70、 注入:50、 注入:50、 注入:40、 – user3666224

答えて

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 
    ) 
) 

または単一の行として:

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

SQLは、残念ながら、あなたは、単一のSELECT文で式の結果をキャッシュまたは別名することはできません - あなたは、サブクエリを使用するか必要があります(最初の例)、または式を繰り返します(2番目の例)。

UPDATE:私はいくつかの研究を行なったし、あなたは一度だけStartIdxを計算するためにCROSS APPLYを使用することができます。

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

私は – user3666224

関連する問題