2016-11-21 15 views
0

こんにちは、私の質問を検討していただきありがとうございます!SQLクエリで2つの定数文字列間の変数を選択

ベンダー提供のMS SQLデータベースでは、GUIを使用してユーザー定義フィールドを追加できます。このフィールドは、データをxml文字列としてテーブルに入力します。私はXMLを取り除き、その間にデータを残すクエリを実行できるようにしたいと考えています。ここで

は私が動的に(変数)日付の左すべて、右を削除したい私の例ではUDFの列

<udf><udf_date_induction>2013-11-19</udf_date_induction> 

のデータの例です2013-11-19、これらは定数であり、それがありますそれらを参照して受け入れる。

<udf><udf_date_induction> 

</udf_date_induction> 
+0

なります

SELECT DATEINXML, DBO.[FN_GETDATEFROMXML](DATEINXML) AS DATE_FROM_XML FROM #TAB 

以下の結果と同様に、あなたのテーブルのカラム上で、このUDFを呼び出しますを使用して、 'UDF'カラム_always_のすべてのエントリは同じ正確なXMLタグを持っていますか? –

答えて

0

私はこれが動作するようにあなたのアイデアを与えるだろうと思います。

declare @val varchar(100) 
set @val='<udf><udf_date_induction>2013-11-19</udf_date_induction>' 
start: 
if (charindex('<',@val)=1) 
begin 
set @val=substring(@val,charindex('<',@val)+charindex('>',@val),len(@val)) 
goto start 
end 
print substring(@val,0,charindex('<',@val)) 
+0

レスポンスありがとうございますが、2013-11-19の@valを設定することはできません。それは可変です。 –

+0

情報が格納されているテーブルから値を取り出し、カーソルを使用して上記のクエリを実行し、新しい値。私はちょうどそれができる方法のアイデアを与えていた:) –

0

あなたの場合には機能は、日付を取得するのに適しています。お使いの場合(実際のテーブルとしてそれを想定)

CREATE TABLE #TAB (DATEINXML VARCHAR(MAX)) 
    INSERT INTO #TAB 

    SELECT '<udf><udf_date_induction>2013-11-19</udf_date_induction>' 
    UNION ALL 
    SELECT '<udf><udf_date_induction>2014-12-20</udf_date_induction>' 
    UNION ALL 
    SELECT '<udf><udf_date_induction>2015-01-21</udf_date_induction>' 
    UNION ALL 
    SELECT '<udf><udf_date_induction>2016-02-22</udf_date_induction>' 

だからあなたのテーブル内のデータの存在

+----------------------------------------------------------+ 
    |      DATEINXML       | 
    +----------------------------------------------------------+ 
    | <udf><udf_date_induction>2013-11-19</udf_date_induction> | 
    | <udf><udf_date_induction>2014-12-20</udf_date_induction> | 
    | <udf><udf_date_induction>2015-01-21</udf_date_induction> | 
    | <udf><udf_date_induction>2016-02-22</udf_date_induction> | 
    +----------------------------------------------------------+ 

今、あなたのコラムを受け入れる1つのユーザー定義関数を作成し、与えるため

スキーマXML部分からの日付。 (私が使用したスタッフ機能を再帰CTEを使用している)

CREATE FUNCTION [dbo].[FN_GETDATEFROMXML](@VAR VARCHAR(MAX)) RETURNS VARCHAR(50) 
    AS 
    BEGIN 
     DECLARE @DATA VARCHAR(50) 
     ;WITH CTE AS(
    SELECT 1 AS START,CHARINDEX('<',@VAR,1) FIRST_IND,CHARINDEX('>',@VAR,1) SECOND_IND , STUFF(@VAR,CHARINDEX('<',@VAR,1),CHARINDEX('>',@VAR,1),'') AS DATA 
    UNION ALL 
    SELECT CAST(SECOND_IND+1 AS INT),CHARINDEX('<',DATA,1) FIRST_IND,CHARINDEX('>',DATA,1) SECOND_IND , STUFF(DATA,CHARINDEX('<',DATA,1),CHARINDEX('>',DATA,1),'') DATA FROM CTE 
WHERE CHARINDEX('<',DATA,1) <>0 
    ) 
    SELECT @DATA= DATA FROM CTE WHERE START= (SELECT MAX(START) FROM CTE) 

      RETURN @DATA  
    END 

今、あなたはSQLのバージョンは何です

+----------------------------------------------------------+---------------+ 
    |      DATEINXML       | DATE_FROM_XML | 
    +----------------------------------------------------------+---------------+ 
    | <udf><udf_date_induction>2013-11-19</udf_date_induction> | 2013-11-19 | 
    | <udf><udf_date_induction>2014-12-20</udf_date_induction> | 2014-12-20 | 
    | <udf><udf_date_induction>2015-01-21</udf_date_induction> | 2015-01-21 | 
    | <udf><udf_date_induction>2016-02-22</udf_date_induction> | 2016-02-22 | 
    +----------------------------------------------------------+---------------+ 
関連する問題