在特定字符SQL

时间:2018-10-31 04:33:12

标签: sql sql-server database tsql

我想从一个/任何符号后面的列中提取某个短语。 例如,如果我想从 SQL-Tutorial 中提取 Tutorial ,则以下查询就足够了。

SELECT SUBSTRING('SQL-Tutorial', 5, 8) AS ExtractString;

如果我想从列中以下字段中提取“-”或“ _”之前或之后的所有内容怎么办?

  • SQL教程
  • Oracle教程
  • IBM DB2-Tutorial
  • Sybase ASE教程
  • PostgreSQL教程
  • MariaDB教程
  • MySQL教程
  • Teradata教程
  • IBM Informix教程
  • Amazon SimpleDB教程

3 个答案:

答案 0 :(得分:1)

如果您使用的是SQL Server,则下面的代码可以提取char'-'之前和之后的所有内容,其中where条件用于验证是否首先有char'-'可以像这样拆分

SELECT 
LEFT([COLUMN],charindex('-',[COLUMN])-1) as BeforeString,
RIGHT([COLUMN],len([COLUMN])-charindex('-',[COLUMN])) as AfterString
FROM [TABLE]
WHERE charindex('-',[COLUMN])<>0

答案 1 :(得分:1)

CREATE TABLE #Table1
    ([COLN] varchar(24))
;

INSERT INTO #Table1
    ([COLN])
VALUES
    ('SQL-Tutorial'),
    ('Oracle-Tutorial'),
    ('IBM DB2-Tutorial'),
    ('Sybase ASE-Tutorial'),
    ('PostgreSQL-Tutorial'),
    ('MariaDB-Tutorial'),
    ('MySQL-Tutorial'),
    ('Teradata-Tutorial'),
    ('IBM Informix-Tutorial'),
    ('Amazon SimpleDB-Tutorial')
;
SELECT  PARSENAME(REPLACE(coln,'-','.'),2) [before],
 PARSENAME(REPLACE(coln,'-','.'),1) [after]  from #Table1

输出

before           after
SQL              Tutorial
Oracle           Tutorial
IBM DB2          Tutorial
Sybase ASE       Tutorial
PostgreSQL       Tutorial
MariaDB          Tutorial
MySQL            Tutorial
Teradata         Tutorial
IBM Informix     Tutorial
Amazon SimpleDB  Tutorial

答案 2 :(得分:1)

您可以使用SUBSTRING和CHARINDEX来获取--p等任何字符的前后

SELECT SUBSTRING(@String,0,CHARINDEX('-',@String,0)) As Before_str,
  SUBSTRING(@String,CHARINDEX('-',@String)+1,LEN(@String)) As After_str