我必须编写一个简单的查询,在其中查找以 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
[:ascii:]
课堂在 Postgres 中是否有效?它没有列在他们的帮助中,但是我在网上看到了使用它的例子。
我有一个 UTF-8 数据库,其中collation和c_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) 我有以下情况。我必须使用 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) 我有一张如下表
CREATE TABLE dbo.DemoTable
(
Value VARCHAR(12)
)
Run Code Online (Sandbox Code Playgroud)
我想限制它只包含Value
匹配以下模式的行
[axyto0-9\s]{0,2}[\s0-9]{0,10}
如何在 SQL Server 中执行此操作?(受 SO 上这个问题的启发)
是否有与[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 之间的字母,因此会返回类似123a
和456b
但不会返回值12ABC
.
我想知道标点符号[0-9]
是否与数字和[a-z]
字母等价,以便它返回AB!23
和C?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 标准版。
如何在列中搜索特定模式?
例如,我喜欢获取以字母 A 或 B 开头的所有用户名。
(顺便说一句:这被标记为oracle
,但它可能在其他 RDBMS 中也很有趣)。
我在stackoverflow上发布了相同的内容(请告诉我是否必须删除一个)。
我正在处理 DB2 数据库,据我所知,不支持正则表达式(没有其他库)。
因此,我无法实现类似于本文“将正则表达式匹配的强大功能引入 SQL ”中所解释的内容
你知道我是否可以用 SQL 语句“模拟”这样的正则表达式吗?
^a[aofdmep]{1}[az]{1}[a-z0-9]{4}[sidbfkfpo]{1}
编辑
在上述假设中,我发现WHERE Like 谓词对我来说是可以接受的:
WHERE USER_NAME 不喜欢“a___”
但这是不安全的,并且不涵盖我没有可以匹配的固定字符的其他情况。
我有一个图片数据库,其中记录了用相机拍摄的照片的信息。该数据库包含一个有 256 列的表pictures
,其中包含有关已拍摄照片的信息。
一列的Comments
格式为ntext
并包含 CR/LF。
\n还有另外 21 列已配置为ntext
.
我使用 SSMS 中的函数将数据库中的数据提取到平面文件中Tasks | Export Data...
。然后,导出的数据由外部合作伙伴传输到将在不久的将来使用的新系统。导出文件 (CSV) 包含约 256 列,其中 21 列可能包含 CR/LF。
字段/列包含大量影响数据分析的Comments
CR/LF (SQL: CHAR(13)
, )。CHAR(10)
我尝试使用REPLACE(expression, value, value)
来搜索 CR/LF 并将其替换为 ,@@
并且正在考虑Export Data
在 SSMS 中使用导出期间实现这一点。
然而,该REPLACE()
函数返回一个
\n消息 8116,级别 16,状态 1,第 4 行
\n参数数据类型 ntext 对于替换函数的参数 1 …
sql-server regular-expression type-conversion sql-server-2014 sql-server-2016
假设我在 Postgres 中有一个具有此值的文本字段:
'bar$foo$john$doe$xxx'
Run Code Online (Sandbox Code Playgroud)
我想将最后一次出现的美元 ( $
) 字符替换为另一个字符,例如“-”。替换后该字段的内容应为:
'bar$foo$john$doe-xxx'
Run Code Online (Sandbox Code Playgroud) 我有一个查询,旨在循环和搜索重复地址,该查询使用 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)