SQL Len(替换)

时间:2017-08-24 23:23:56

标签: sql sql-server sql-server-2005

在SQL Server 2005中,我有一个timestamp类型列。我想转换为datetime类型。例如:

'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

但它不起作用

1 个答案:

答案 0 :(得分: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