sql >> データベース >  >> Database Tools >> SSMS

列からテキストを抽出し、それを新しい列にコピーします

    次の形式の日付/時刻値の最初の出現を文字列列から抽出する必要があると仮定しますDD/MM/YYYY HH:SS (長さ=16文字)次に、PATINDEXを使用します CHARINDEXの代わりに したがって:

    SELECT  *, 
        SUBSTRING(
            x.StringColumn, 
            NULLIF(PATINDEX('%[0-1][0-9]/[0-3][0-9]/[0-9][0-9][0-9][0-9][ ][0-9][0-9]:[0-9][0-9]%', x.StringColumn), 0), 
            16) AS DateTimeExtracted
    FROM    (VALUES 
        ('Bogdanel 01/02/2017 03:04 hei ho'),
        ('Georgel 05/06/2017 07:08 danga langa'),
        ('Suna''n asfintit 09/11/2018 11:22 hei talanga'),
        ('Danga langa. Pai da.'),
        ('   '),
        (NULL)
    ) x(StringColumn)
    

    結果:

    StringColumn                                 DateTimeExtracted
    -------------------------------------------- -----------------
    Bogdanel 01/02/2017 03:04 hei ho             01/02/2017 03:04
    Georgel 05/06/2017 07:08 danga langa         05/06/2017 07:08
    Suna'n asfintit 09/11/2018 11:22 hei talanga 09/11/2018 11:22
    Danga langa. Pai da.                         NULL
                                                 NULL
    NULL                                         NULL
    


    1. innodb_forced_recovery> 0の場合、操作は許可されません[SqlYog]

    2. 禁止:このサーバーにアクセスする権限がありません、WAMPエラー

    3. phpmysqlエラー-#1273-#1273-不明な照合:'utf8mb4_general_ci'

    4. #1292-日付の値が正しくありません: '0000-00-00'