SQL 长度(替换)

SQL Len(replace)

在 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

但是没用

您可以检查字符串是否完全由 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 表达式,因为您不能 return 来自同一表达式的字符串和日期时间。

Demo