【发布时间】: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