【问题标题】:Why can't I use regex in Sybase SQL为什么我不能在 Sybase SQL 中使用正则表达式
【发布时间】:2013-06-30 23:46:24
【问题描述】:

我正在使用这个版本的 Sybase -

Adaptive Server Enterprise/15.5/EBF 18164 SMP ESD#2/P/x86_64/Enterprise Linux。

当我尝试运行以下查询时,我收到一条错误消息 Incorrect syntax near 'regexp'

SELECT * FROM T1 WHERE C1 regexp '.*'

如果此版本的 ASE 不支持,有人可以提出替代方案吗?

【问题讨论】:

标签: sql sybase sap-ase


【解决方案1】:

天真地,您可以构造一个包含您想要查找的字符的 varchar(nn),或者反过来,知道有效字符的集合并在该集合中搜索任何 NOT。

declare @mySet varchar(255)
select @mySet = '%[' + char(128) + char(129) + ... + ']%'
-- OR 
select @mySet = '%[^A-Z0-9_-@.]%' -- for example, case insensitive
-- then
select * from T where C like @mySet

【讨论】:

    【解决方案2】:

    试试这个方法:

    SELECT * FROM T1 WHERE C1 like '%.%'
    

    SELECT * FROM T1 WHERE C1 like '%[.]%'
    

    【讨论】:

    • 那不是正则表达式吗?因为我的主要目标是编写一个更复杂的正则表达式来找到我正在寻找的东西。
    • Sybase-ASE 没有regexp函数。但是您可以使用[] 的正则表达式,就像上面的第二个示例一样。
    • 更准确地说,我正在尝试查找特殊字符(其 ascii 值为 > x7F)
    • 你可以使用char函数例如where col1 = char(127)
    • 好的,知道了。这有效 SELECT * FROM T1 WHERE C1 LIKE '%' + char(127) + '%'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    • 2017-01-13
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多