【问题标题】:SQL server trimingSQL 服务器修整
【发布时间】:2016-05-24 21:41:53
【问题描述】:

我正在尝试通过删除从前空格开始的所有内容来格式化表中的 licenseenum 列,并且我想删除从“-”开始的 licenseenum 列中的任何字符,包括“-”

例如:
Licenseenum GA 350-0 中的当前数据 我想要得到 350

这是我的代码

select Licenseenum, SUBSTRING (Licenseenum, 4, LEN(Licenseenum)-1)
from licensee

这个结果 350-0

如何从结果中删除 -0?

感谢您的帮助

【问题讨论】:

标签: sql-server-2008 tsql


【解决方案1】:

这样试试

DECLARE @YourString VARCHAR(100)='GA 350-0';

SELECT SUBSTRING(@YourString,CHARINDEX(' ',@YourString,1),CHARINDEX('-',@YourString,1)-CHARINDEX(' ',@YourString,1));

更新 1

这完全一样,但更好读

DECLARE @YourString VARCHAR(100)='GA 350-0';

WITH Positions AS
(
    SELECT CHARINDEX(' ',@YourString,1) AS posBlank
          ,CHARINDEX('-',@YourString,1) AS posMinus  
)
SELECT SUBSTRING(@YourString,posBlank,posMinus-posBlank)
FROM Positions;

更新 2 避免前导空格...

我的逻辑需要稍加修正,以便在数字前切掉空白:

SELECT SUBSTRING(@YourString,posBlank+1,posMinus-posBlank-1)

与第一个示例相同...

【讨论】:

  • 您的第一个查询对我有用。谢谢您并赞赏。
【解决方案2】:

请尝试以下代码。它在 SQL Server 2012 中运行良好。

DECLARE @Licenseenum  varchar(max)
SET @Licenseenum  ='GA 350-0'

DECLARE @TempLicense VARCHAR(100)
DECLARE @License VARCHAR(100)
IF (len(@Licenseenum ) - len(replace(@Licenseenum ,' ',''))>=1)
    SET @TempLicense = (SELECT REVERSE(LEFT(REVERSE(@Licenseenum ),CHARINDEX(' ', REVERSE(@Licenseenum ), 1) - 1)))
ELSE
    SET @TempLicense = @Licenseenum 

SELECT  @License = (SELECT LEFT(@TempLicense,LEN(@TempLicense) - charindex('-',reverse(@TempLicense),1)))
SELECT @License AS Licenseenum

【讨论】:

  • 感谢您的帮助。
  • 嗨,Praveen,你已经接受了,这对你很好......但你能解释一下,为什么你这样做如此复杂,一遍又一遍地来回颠倒?跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-19
  • 1970-01-01
  • 2019-10-21
  • 2010-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多