标签: regular-expression

PostgreSQL 中 LIKE、SIMILAR TO 或正则表达式的模式匹配

我必须编写一个简单的查询,在其中查找以 B 或 D 开头的人名:

SELECT s.name 
FROM spelers s 
WHERE s.name LIKE 'B%' OR s.name LIKE 'D%'
ORDER BY 1
Run Code Online (Sandbox Code Playgroud)

我想知道是否有办法重写它以提高性能。所以我可以避免or和/或like

postgresql index regular-expression pattern-matching string-searching

123
推荐指数
3
解决办法
18万
查看次数

从 Postgres 查询非 ASCII 行

[:ascii:]课堂在 Postgres 中是否有效?它没有列在他们的帮助中,但是我在网上看到使用它的例子

我有一个 UTF-8 数据库,其中collat​​ionc_typ e 是en_US.UTF-8,Postgres 版本是 9.6.2。当我像这样搜索非 ASCII 行时:

select title from wallabag_entry where title ~ '[^[:ascii:]]';
Run Code Online (Sandbox Code Playgroud)

我得到Unicode 和非 Unicode 符号(完整输出在这里):

?????????? ??????????????: ???? ????????? ??????? ?????
??????? ???????? ????????: ????? ?? ?????? ????????? ?? ???????
??? ?? ?????? ? ??????? ?? ????: ??? ? ????????????? ?????????? ???????????
??? ???????? ??????? ? 1740-? ???? ?? ??????? ??????? ??????
Have …
Run Code Online (Sandbox Code Playgroud)

postgresql regular-expression utf-8 regex unicode

17
推荐指数
1
解决办法
2万
查看次数

如何在 MySQL 中使用 REGEXP 使用 SUBSTRING

我有以下情况。我必须使用 MySQL 从描述中子字符串正则表达式。描述:

Lorem D9801 ipsum dolor 坐 amet

其中 D9801 是 REGEXP。每个强文本描述都有不同的内容,但我的正则表达式应该如下所示:REGEXP 'D[[:digit:]]{4}'

REGEXP 总是以“D”开头和“xxxx” - 4 位数字结尾:Dxxxx

我知道 REGEXP 只返回 true/false 值,但如何查询只返回“D9801”值?

我试过这样的事情:

SELECT SUBSTRING (description, LOCATE(REGEXP 'D[[:digit:]]{4}', description), 5)
FROM (
   SELECT "Lorem D9801 ipsum dolor sit amet" AS description
) temp
Run Code Online (Sandbox Code Playgroud)

我知道这是错误的,所以我尝试这样做:

SELECT 
    id, 
    SUM(description REGEXP 'D[[:digit:]]{4}') AS matches, 
    CASE
        WHEN (SUM(description REGEXP 'D[[:digit:]]{4}') > 0) THEN 
            SUBSTRING(description, LOCATE( /*POSITION_OF_REGEXP_IN_DESC*/ , description), 5)
        ELSE 'Brak schematu'
    END AS show_substr FROM ps_description GROUP BY id; …
Run Code Online (Sandbox Code Playgroud)

mysql regular-expression

16
推荐指数
1
解决办法
6万
查看次数

如何强制表列中的值匹配正则表达式“[axyto0-9\s]{0,2}[\s0-9]{0,10}”?

我有一张如下表

CREATE TABLE dbo.DemoTable
(
Value VARCHAR(12)
)
Run Code Online (Sandbox Code Playgroud)

我想限制它只包含Value匹配以下模式的行

[axyto0-9\s]{0,2}[\s0-9]{0,10}

  • 字符串的开始
  • 出现在下面列表中的单个字符在 0 到 2 次之间,尽可能多次
    • 列表“axyto”中的单个字符(区分大小写)
    • 介于“0”和“9”之间的字符
    • 一个“空白字符”
  • 匹配下面列表中出现的单个字符 0 到 10 次,尽可能多
    • 一个“空白字符”
    • 介于“0”和“9”之间的字符
  • 字符串结束

如何在 SQL Server 中执行此操作?(受 SO 上这个问题的启发

sql-server regular-expression check-constraints

13
推荐指数
1
解决办法
897
查看次数

标点符号是否有 T-SQL 等价物,因为 [0-9] 用于数字而 [az] 用于字母?

是否有与[0-9][a-z]模式等效的 T-SQL可以让我从包含标点符号的列中提取值?

例如:

Create Table #Test
(
Value   VarChar(10)
) 
Insert Into #Test
Values ('123a'), ('456b'), ('12ABC'),('AB!23'),('C?D789')

Select      *
From        #Test
Where       Value like '[0-9][0-9][0-9][a-z]'
Run Code Online (Sandbox Code Playgroud)

这将返回值,其中前 3 个字符是 0 到 9 之间的数字,最后一个字符将是 a 和 z 之间的字母,因此会返回类似123a456b但不会返回值12ABC.

我想知道标点符号[0-9]是否与数字和[a-z]字母等价,以便它返回AB!23C?D789

如果我可以使用正则表达式,我可能会使用该表达式^[a-zA-Z0-9]*$来匹配字符串中的字母数字字符。

Where       Value like '^[a-zA-Z0-9]*$'
Run Code Online (Sandbox Code Playgroud)

是否有与此等效的 SQL?

我知道这种事情可以在 RegEx 中完成,但我需要在 T-SQL 中完成,我无法将任何自定义程序集加载到此服务器上,因此无法使用正则表达式。

真正的列是varchar(200)。归类是 Latin1_General_CI_AS。我使用的是 SQL Server 2012 标准版。

sql-server regular-expression t-sql sql-server-2012

8
推荐指数
2
解决办法
9798
查看次数

如何使用正则表达式查询名称?

如何在列中搜索特定模式?

例如,我喜欢获取以字母 A 或 B 开头的所有用户名。

(顺便说一句:这被标记为oracle,但它可能在其他 RDBMS 中也很有趣)。

oracle regular-expression

7
推荐指数
1
解决办法
7981
查看次数

在 DB2 SQL 中模拟 REGEXP 之类的行为

我在stackoverflow上发布了相同的内容(请告诉我是否必须删除一个)。

我正在处理 DB2 数据库,据我所知,不支持正则表达式(没有其他库)。

因此,我无法实现类似于本文“将正则表达式匹配的强大功能引入 SQL ”中所解释的内容

你知道我是否可以用 SQL 语句“模拟”这样的正则表达式吗?

^a[aofdmep]{1}[az]{1}[a-z0-9]{4}[sidbfkfpo]{1}

编辑

在上述假设中,我发现WHERE Like 谓词对我来说是可以接受的:

WHERE USER_NAME 不喜欢“a___”

但这是不安全的,并且不涵盖我没有可以匹配的固定字符的其他情况。

regular-expression db2

7
推荐指数
3
解决办法
2万
查看次数

ntext 列中 REPLACE() 的替代解决方案

概述

\n

我有一个图片数据库,其中记录了用相机拍摄的照片的信息。该数据库包含一个有 256 列的表pictures,其中包含有关已拍摄照片的信息。

\n

一列的Comments格式为ntext并包含 CR/LF。
\n还有另外 21 列已配置为ntext.

\n

我使用 SSMS 中的函数将数据库中的数据提取到平面文件中Tasks | Export Data...。然后,导出的数据由外部合作伙伴传输到将在不久的将来使用的新系统。导出文件 (CSV) 包含约 256 列,其中 21 列可能包含 CR/LF。

\n

问题

\n

字段/列包含大量影响数据分析的CommentsCR/LF (SQL: CHAR(13), )。CHAR(10)

\n

我尝试使用REPLACE(expression, value, value)来搜索 CR/LF 并将其替换为 ,@@并且正在考虑Export Data在 SSMS 中使用导出期间实现这一点。

\n

然而,该REPLACE()函数返回一个

\n
\n

消息 8116,级别 16,状态 1,第 4 行
\n参数数据类型 ntext 对于替换函数的参数 1 …

sql-server regular-expression type-conversion sql-server-2014 sql-server-2016

7
推荐指数
1
解决办法
1578
查看次数

如何替换字符串(文本列)中最后一次出现的字符?

假设我在 Postgres 中有一个具有此值的文本字段:

'bar$foo$john$doe$xxx'
Run Code Online (Sandbox Code Playgroud)

我想将最后一次出现的美元 ( $) 字符替换为另一个字符,例如“-”。替换后该字段的内容应为:

'bar$foo$john$doe-xxx'
Run Code Online (Sandbox Code Playgroud)

postgresql regular-expression replace

5
推荐指数
2
解决办法
1万
查看次数

PostgreSQL - 在 REGEX_REPLACE() 上有效索引

我有一个查询,旨在循环和搜索重复地址,该查询使用 REGEX_REPLACE。我正在尝试在正则表达式上建立索引,就像进行解释一样,并且它使用正则表达式上的过滤器对 user_property 表进行顺序扫描

EXPLAIN (ANALYZE, COSTS, VERBOSE, BUFFERS)  with user_detail AS (
        SELECT user_id,
            max(user_property_value) FILTER (WHERE user_property_type_id = 6 ) AS FIRST_NAME,
            max(user_property_value) FILTER (WHERE user_property_type_id = 7 ) AS LAST_NAME,
            max(TO_DATE(user_property_value, 'YYYY-MM-DD')) FILTER (WHERE user_property_type_id = 8 ) AS DOB,
            max(user_property_value) FILTER (WHERE user_property_type_id = 33 ) AS BIRTH_NUMBER
        FROM PUBLIC.user_property cp
        JOIN PUBLIC.user c using (user_id)
        WHERE c.user_group_id= '38'
        AND cp.user_property_is_active
        GROUP BY user_id
    ),
    duplicate as (
        SELECT COALESCE(MAX(
                CASE WHEN REGEXP_REPLACE((address_line1), E'\\_|\\W','','g') = 'Flat …
Run Code Online (Sandbox Code Playgroud)

postgresql index regular-expression regex

5
推荐指数
1
解决办法
659
查看次数