仅选择列中撇号内的数据。

时间:2011-07-30 17:39:37

标签: sql select

我有一个包含字符串的列,如:

 Approved By Smith, John For  'Core Authoring Files'

我希望我的选择只返回

 Core Authoring Files

有没有办法只选择撇号内的数据?

2 个答案:

答案 0 :(得分:0)

尝试这一点,但子串在不同的数据库系统中实现略有不同,因此您可能需要根据您使用的服务器进行一些修改。

select 
substring(column, charindex("'", column, 0) as begin), charindex("'", column, begin + 1) - begin)) as thestring
from yourTable; 

这种方法的工作方式是使用charindex函数来查找字符串中第一个引号字符的位置,然后在第一个引号后面的字符处找到字符串中的第二个引号字符,并减去这些位置以获得要提取的字符串的长度。这两个数字被传递给substring函数以获得substring(column,startposition,length)。

希望这有帮助

修改

我想花一点时间来阻止你允许未转义的引号字符存储在你的数据库中。这是一种乞求sql注入攻击的情况。如果你不熟悉,请在走太远之前研究sql注入。

答案 1 :(得分:0)

在Postgresql中,使用regexp_replace字符串运算符非常简单。

e.g。

SELECT * FROM (
   SELECT 
      regexp_replace(title, E'.*\'\(.*\)\'.*', E'\\1') AS result 
   FROM
      items) x 
WHERE
   result IS NOT null;