【问题标题】:SQL(ite) JOIN with regex within JOINSQLite) 在 JOIN 中使用正则表达式 JOIN
【发布时间】:2015-01-02 14:46:06
【问题描述】:

我有两个表,都有一个名为Name 的列。有时名称以大写字母开头,而有时则不是。我想在名称上加入这两个表,以便鲍勃与鲍勃相匹配。我假设这可以通过正则表达式实现,那么如何构造一个 SQL JOIN 查询来进行这种匹配,正确的正则表达式是什么?

例如:假设我有 table1:

Name| col1
----------
Bob | a
Jon | b

表2为:

Name| col2
----------
bob| c
Jon| d

我会按如下方式加入他们(xx 是缺少的正则表达式,yy 是正确的选择)

SELECT * , yy as NameWithCapAtFront
FROM table1 as t1
LEFT JOIN table2 as t2
ON xx(t1.Name)=xx(t2.Name)

但这错过了bobBob 的匹配。

此外,如何总是选择大写版本的名称。

【问题讨论】:

    标签: sql regex sqlite join


    【解决方案1】:

    只使用lower() 函数怎么样?

    SELECT *, upper(substr(t1.name, 1, 1) || lower(t1.name, 2) as NameWithCapAtFront
    FROM table1 as t1 LEFT JOIN
         table2 as t2
         ON lower(t1.Name) = lower(t2.Name);
    

    诚然,这将整个名称小写,但在这种情况下这似乎是合理的。

    【讨论】:

    • 在 SQL Server 上是这样吗?我不记得 SQL Server 在这样的连接中区分大小写
    • @JeffOrris 。 . .任何给定的数据库是否使用区分大小写的比较取决于表、数据库和服务器的排序规则。默认情况下,我认为大多数数据库中的连接都不区分大小写(我会说全部),但这似乎是这个 OP 的一个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-18
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    相关资源
    最近更新 更多