在存储过程中,我有此字段
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"
答案 0 :(得分:0)
由于未提及数据库,因此您可以执行以下操作(而不是查找数据库)
SQL Server
Remove the last character in a string in T-SQL?
Oracle
Remove last character from string in sql plus
PostgreSQL
Postgresql: Remove last char in text-field if the column ends with minus sign
MySQL
答案 1 :(得分:0)
我认为您可能在这里被字符串处理所困扰。
此处的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 |
+---------+
答案 2 :(得分:0)
您可以将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 |
+----------------+