在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
但它不起作用
答案 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
表达式,因为您无法从同一表达式返回字符串和日期时间。