2017-08-24 20 views
2

SQL Server 2005では、timestampタイプの列があります。私はdatetimeタイプに変換したいです。例:SQL Len(交換)

'20170824112344' 

しかし、それらは悪くなる可能性があります。たとえば、次のように私は長さ14

case 
    when len(replace(fecha,' ','')) = 14 
     then convert(smalldatetime, SUBSTRING(fecha, 7, 2) + '-' + 
            SUBSTRING(fecha, 5, 2) + '-' + 
            SUBSTRING(fecha, 1,4) + ' ' + 
            SUBSTRING(fecha, 9, 2) + ':' + 
            SUBSTRING(fecha, 11, 2) + ':00', 103) 
     else fecha 
end as fecha 

持つものでフィルタしたいが、それは

答えて

4

あなただけの文字列は、14桁の完全構成されていることを確認することができ動作しません

'____123456____' 

_ = blank spaces 

SELECT 
    CONVERT(smalldatetime, SUBSTRING(fecha, 1, 4) + '-' + SUBSTRING(fecha, 5, 2) 
     + '-' + SUBSTRING(fecha, 7, 2) + ' ' + SUBSTRING(fecha, 9, 2) + ':' + 
     SUBSTRING(fecha, 11, 2) + ':00', 120) AS fecha 
FROM yourTable 
WHERE fecha 
    LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' 

CASE式を削除しました。同じ式から文字列と日時の両方を返しません。

Demo

+1

一つは 'LTRIM'と' RTRIM'がLIKE'は、文字列が14文字の長さで、数字のみで構成されていることを保証 'として本当に必要ないと主張することができます。 – Alex

+0

しかし、私はすべての記録が必要です。 日付に変換することができますが、あなたが持っているもの –

+0

私の答えがうまくいかない場合、明確な入力と期待される出力を示す質問を更新してください。 –