sql从字符串列中删除破折号

2w2cym1i  于 2021-07-29  发布在  Java
关注(0)|答案(3)|浏览(318)

在存储过程中,我有这个字段

LTRIM(ISNULL(O.Column1, ''))

如果在值的末尾有一个破折号(-),请删除它。仅在开始/结束处存在破折号的情况下。
有什么建议吗
编辑:
microsoft sql server 2014 12.0.5546.0版
预期产量:

1)input: "abc-abc" //output: "abc-abc"

2)input: "abc-" //output: "abc"

3)input: "abc" //ouput: "abc"
92vpleto

92vpleto1#

我想你可能被这里的字符串操作卡住了。
这个 CASE 这里的表达式取 LTRIM/RTRIM 从列中选择结果并检查两端是否有破折号,然后检查两端是否有破折号。如果有破折号,它会把它们去掉。它并不漂亮,在堆积如山的数据上也不会有很好的表现,但可以满足您的需要。
数据设置:

create table trim (col1 varchar(10));

insert trim (col1)
values
  ('abc'),
  (' abc-'),
  ('abc- '),
  ('abc-abc '),
  (' -abc'),
  ('-abc '),
  (NULL),
  (''),
  (' -abc- ');

查询:

select 
 case 
    when right(ltrim(rtrim(isnull(col1,''))),1) = '-'
     and left(ltrim(rtrim(isnull(col1,''))),1) = '-'
      then substring(ltrim(rtrim(isnull(col1,''))),2,len(ltrim(rtrim(isnull(col1,''))))-2)
    when right(ltrim(rtrim(isnull(col1,''))),1) = '-'
      then left(ltrim(rtrim(isnull(col1,''))), len(ltrim(rtrim(isnull(col1,''))))-1)
    when left(ltrim(rtrim(isnull(col1,''))),1) = '-'
      then right(ltrim(rtrim(isnull(col1,''))), len(ltrim(rtrim(isnull(col1,''))))-1)
    else ltrim(rtrim(isnull(col1,'')))
  end as trimmed
from trim;

结果:

+---------+
| trimmed |
+---------+
| abc     |
| abc     |
| abc     |
| abc-abc |
| abc     |
| abc     |
|         |
|         |
| abc     |
+---------+

sql fiddle演示

tmb3ates

tmb3ates2#

因为数据库没有被提及,这里是你如何做它(而不是找到它)
sql服务器
删除t-sql中字符串的最后一个字符?
Oracle
删除sql plus中字符串的最后一个字符
postgresql语言
postgresql:如果列以减号结尾,则删除文本字段中的最后一个字符
mysql数据库
在mysql中去掉列的最后两个字符

uqdfh47h

uqdfh47h3#

可以使用left函数和substring来实现结果。

SELECT CASE WHEN RIGHT(stringVal,1)= '-' THEN SUBSTRING(stringVal,1,LEN(stringVal)-1) 
ELSE stringVal END AS ModifiedString 
from
( VALUES ('abc-abc'), ('abc-'),('abc')) as t(stringVal)
+----------------+
| ModifiedString |
+----------------+
| abc-abc        |
| abc            |
| abc            |
+----------------+

相关问题