【问题标题】:LTRIM does not remove leading space in SQLLTRIM 不会删除 SQL 中的前导空格
【发布时间】:2020-03-25 18:31:25
【问题描述】:

我从文本文件加载数据,但它似乎不包含前导空格,但是当我从表中选择时,我看到前导空格但无法使用 LTRIM 函数将其删除:

SELECT ltrim(DATA) FROM MYTABLE WHERE LineNumber = 4

我得到以下信息:


T000000000004

在 T 之前有一个前导空格

当我执行select convert(varbinary,data) from mytable 时,我得到的就是这样:

0x0A54303030303030303030303034

在文件中看起来没问题:T000000000004 - 没有前导空格,它从文件中的第一个字符开始。但是,在表格中插入前导空格。

我该如何解决?

【问题讨论】:

  • 它可能是一个不可见的字符,不是空格,这就是 LTRIM 无法删除它的原因。您可以尝试获取该字符的字符代码(ASCII/UNICODE)吗?它可能会给你一个线索。
  • 你给我们的例子确实删除了db<>fiddle。 Acutally 复制您收到的值,并使用 LTRIM 显示您的 SQL
  • @Larnu 那是因为我在这里输入的。
  • 这就是我说 " 的原因。Acutally 复制您收到的值,并使用 LTRIM 显示您的 SQL" @gene 。您的问题没有复制问题,也没有使用LTRIM
  • @Larnu 我修改了问题

标签: tsql trim


【解决方案1】:

正如 HABO 所提到的,您的值不是以空格开头的,它实际上根本没有任何空格,它有一个前导换行符(字符 10 或 0X0A)。

要删除这些,以及您可能有的任何回车,您可以使用REPLACE

REPLACE(REPLACE(data,CHAR(10),'')),CHAR(13),'')

(L/R)TRIM 只删除前导/尾随空格。没有别的了。

如果可能有一系列前导字符,并且您想删除所有前导字符,直到第一个字母数字字符,您可以使用PATINDEXSTUFF

SELECT STUFF(V.[data],1,PATINDEX('%[A-z1-9]%',V.[data])-1,'')
FROM (VALUES(CHAR(10) + CHAR(13) + '  -T000000129B'))V([data])

【讨论】:

  • 谢谢。其实是这样的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多