2017-08-24 52 views
2

在SQL Server 2005中,我有一個timestamp類型的列。我想轉換爲datetime類型。例如:SQL Len(替換)

'20170824112344' 

但他們可能會變壞。例如:

'____123456____' 

_ = blank spaces 

我想那些長度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位:

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

如果我的答案不適合你,那麼更新你的問題,顯示明確的輸入和預期的輸出。 –