sql - 返回具有已知前缀和后缀字符的 SUBSTRING

标签 sql sql-server tsql substring

我有一个表,它有一个始终以 . 结尾的可变长度前缀和一个始终以 - 开头的可变长度后缀。 - 也可以在我要查找的文本字符串中找到,因此使用 REVERSE() 可能是识别后缀 - 的最佳方法。

例如:Prefix1.ABC-123-Suffix1

我希望 SUBSTRING() 结果看起来像:ABC-123

我能够创建一个 SUBSTRING() 来删除前缀和一个 SUBSTRING() 来删除后缀,但是我很难应用两个都。返回的文本可以是可变长度的。

我试图避免声明一个变量,但我对此持开放态度。如果可能,我宁愿只使用 SUBSTRING()、REVERSE() 和 CHARINDEX()。

这是我目前所拥有的:

SELECT [Col1]
       ,SUBSTRING((Col1),CHARINDEX('.', (Col1)) + 1, 999) AS [StrippedPrefix]
       ,REVERSE(SUBSTRING(REVERSE(Col1),CHARINDEX('-', REVERSE(Col1)) + 1, 999)) AS [StrippedSuffix]

--new SUBSTRING() with both Prefix and Suffix stripped

FROM [Table1]

最佳答案

Declare @YourTable table (Col1 varchar(50))
Insert Into @YourTable values
('Prefix1.ABC-123-Suffix1')

Select *
      ,String=Substring(Col1,charindex('.',Col1)+1,len(Col1)-charindex('.',Col1)-charindex('-',reverse(Col1)))
 From  @YourTable

返回

Col1                       String
Prefix1.ABC-123-Suffix1    ABC-123

按照 M Ali 的建议(更好)

Select *
      ,String=PARSENAME(REPLACE(Col1 , '-', '.') , 3) + '-' + PARSENAME(REPLACE(Col1 , '-', '.') , 2) 
 From  @YourTable

关于sql - 返回具有已知前缀和后缀字符的 SUBSTRING,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41286121/

相关文章:

mysql - 这个 SQL 语句有更高效的版本吗?

MySql order by 与今天的日期相关

java - 将 Types.NVARCHAR 与 oracle JDBC 驱动程序一起使用以处理西里尔字符

sql - 在 SQL 中查询 JSON

sql-server - 列前缀 '%s' 与查询中使用的表名或别名不匹配

mysql - 数据库中的区域设置支持

sql - 如果连接/where 条件中有格式化/转换,索引是否有效?

sql-server - 是否可以在没有SSIS的情况下执行T-SQL模糊查找?

sql - 运行 SQL 查询 - 超时

sql - 查询优化 - 增加估计数据大小