sql >> データベース >  >> RDS >> Sqlserver

列から値を抽出し、別の列の結果を更新する方法

    ヘルパーテーブル値関数を開いている場合:

    Declare @YourTable table (IdDate int,FullDate varchar(max))
    Insert Into @YourTable values
     (0,'Nº1 (26) - Friday 4, January 2014')
    ,(0,'Nº2 (64) - Monday 10, February 2015')
    
    Update A
       set IdDate = substring(Pos1,3,10)
                  + try_convert(varchar(10),try_convert(date,Pos6+' '+Pos5+' '+Pos7),112)
     From  @YourTable A
     Cross Apply [dbo].[tvf-Str-Parse-Row](FullDate,' ') B
    

    返品

    IDDate      FullDate
    120140104   Nº1 (26) - Friday 4, January 2014
    220150210   Nº2 (64) - Monday 10, February 2015
    

    視覚化に役立つ場合は、TVFが戻ります

    興味がある場合の機能

    CREATE FUNCTION [dbo].[tvf-Str-Parse-Row] (@String varchar(max),@Delimiter varchar(10))
    Returns Table 
    As
    Return (
        Select Pos1 = ltrim(rtrim(xDim.value('/x[1]','varchar(max)')))
              ,Pos2 = ltrim(rtrim(xDim.value('/x[2]','varchar(max)')))
              ,Pos3 = ltrim(rtrim(xDim.value('/x[3]','varchar(max)')))
              ,Pos4 = ltrim(rtrim(xDim.value('/x[4]','varchar(max)')))
              ,Pos5 = ltrim(rtrim(xDim.value('/x[5]','varchar(max)')))
              ,Pos6 = ltrim(rtrim(xDim.value('/x[6]','varchar(max)')))
              ,Pos7 = ltrim(rtrim(xDim.value('/x[7]','varchar(max)')))
              ,Pos8 = ltrim(rtrim(xDim.value('/x[8]','varchar(max)')))
              ,Pos9 = ltrim(rtrim(xDim.value('/x[9]','varchar(max)')))
        From  (Select Cast('<x>' + replace((Select replace(@String,@Delimiter,'§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml) as xDim) as A 
    )
    

    または機能なし

    Update A
       set IdDate = substring(Pos1,3,10)
                  + try_convert(varchar(10),try_convert(date,Pos6+' '+Pos5+' '+Pos7),112)
     From  @YourTable A
     Cross Apply (
                    Select Pos1 = ltrim(rtrim(xDim.value('/x[1]','varchar(max)')))
                          ,Pos2 = ltrim(rtrim(xDim.value('/x[2]','varchar(max)')))
                          ,Pos3 = ltrim(rtrim(xDim.value('/x[3]','varchar(max)')))
                          ,Pos4 = ltrim(rtrim(xDim.value('/x[4]','varchar(max)')))
                          ,Pos5 = ltrim(rtrim(xDim.value('/x[5]','varchar(max)')))
                          ,Pos6 = ltrim(rtrim(xDim.value('/x[6]','varchar(max)')))
                          ,Pos7 = ltrim(rtrim(xDim.value('/x[7]','varchar(max)')))
                    From  (Select Cast('<x>' + replace((Select replace(FullDate,' ','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml) as xDim) as A 
                 ) B
    

    これは、ショーンのクリーナーの拡張バージョンです。 ソリューション

    Update @YourTable 
       set IdDate = substring(left(FullDate,charindex(' ',FullDate)-1),3,25)
                   +try_convert(varchar(10),try_convert(date,replace(substring(FullDate, charindex(',', FullDate) - 2, 100), ',', '')),112)
    
    
    Select * from @YourTable
    


    1. MySQLエラー1005?

    2. postgresを使用したsqlalchemy:列に括弧が付いているテーブルに挿入します

    3. GoogleカレンダーAPI:カレンダーの選択/作成?

    4. PDOのbind_resultに相当するものは何ですか