【问题标题】:Can't remove Trailing spaces in the rows无法删除行中的尾随空格
【发布时间】:2020-10-15 22:15:21
【问题描述】:

我有一列包含如下数据:

'2020193'
'3208391'
'1038291'
'9349203'

数据类型为varchar,我无法将其更改为int(数据始终以该数据类型管理)。

我有一些带有尾随空格的行,例如:

' 2222928'
' 3213331'

我需要从开头删除尾随空格。我尝试过SUBSTRING()TRIM()/RTRIM()/LTRIM(),但都没有成功。

select (rtrim(ltrim(doc_id))) from bpm.sales where len(doc_id) = 8
select left(doc_id,2) from bpm.sales where len(doc_id) = 8
select charindex(' ',doc_id) from bpm.sales where len(doc_id) = 8

此外,当我尝试搜索以下数据时:

select doc_id from bpm.sales where doc_id = ' 2269203'

在列中存在的地方我什么也得不到。有了CHARINDEX(),我得到了0

有人可以解释一下这种行为并提出解决方案吗?

【问题讨论】:

  • 看起来更像是前导空格。
  • 你确定是空格吗?它可能是一个标签或其他一些不可见的字符?
  • 运行此查询以识别问题行:SELECT doc_id FROM bpm.sales WHERE ISNUMERIC(doc_Id) = 0
  • 我认为我们唯一确定的是它不是一个空格。这是其他一些非打印字符。看看这个答案:stackoverflow.com/a/3917698/5790584
  • 这些 SELECT 语句的结果是什么?它们不会更改值(为此您需要更新),只需报告现有值。

标签: sql sql-server


【解决方案1】:

你可以去掉所有你想要的字符:

select stuff(doc_id, 1, patindex('%[^0-9a-zA-Z]%', doc_id) - 1, '')
        

【讨论】:

    猜你喜欢
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多