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 来自同一表达式的字符串和日期时间。
在 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 来自同一表达式的字符串和日期时间。