【问题标题】:Select rows that contain both English and non-English characters选择同时包含英文和非英文字符的行
【发布时间】:2012-05-03 16:06:18
【问题描述】:

好的,所以我在 SQL Server 的表中有一个列。 每个记录都有一个字符串(即名称) 一些字符串有英文和非英文字符。

我必须只选择有英文和非英文字符的记录。

我该怎么做?

我的尝试...

Select * from Table
Where Nameofthecolumn NOT LIKE '%[A-Z]%'
Go

这会给我 EMPTY 表。

我确定至少有两条记录有英文和非英文字符。

我需要这两条记录作为输出。

我正在尝试做

Select * from Table
Where Nameofthecolumn NOT LIKE '%[A-Z,a-z]%' AND Like '%[A-Z,a-z]%'
Go

但事实证明,您可以将布尔值与 Like/Not Like 一起使用。

请指引我正确的方向。

谢谢

【问题讨论】:

    标签: sql sql-server database sql-server-2008


    【解决方案1】:

    如何反转您的搜索,例如找出任何与 A-Z 不匹配的内容:

    ... WHERE col LIKE '%[^A-Z]%' AND col LIKE '%[A-Z]%';
    

    如果排序规则不区分大小写,则不需要 a-z,如果区分大小写,则可以添加 COLLATE 子句。但您可能希望过滤掉预期的空格、数字和其他非字母数字。

    【讨论】:

    • @JohnSmith 每个人都在猜测。您能否提供一些示例数据,显示您要包含的行和要排除的行?
    【解决方案2】:

    你的意思是这样的吗?

    select 1 as field1,'1' as field2 into #data
    union all select 1,'abc'
    union all select 2,'abc'
    union all select 3,'999'
    
    
    SELECT * FROM 
    (
    select field1,field2
    ,MAX(CASE WHEN field2 NOT LIKE '%[A-Z,a-z]%' THEN 1 ELSE 0 END) OVER (PARTITION BY field1) 
     + MAX(CASE WHEN field2 LIKE '%[A-Z,a-z]%' THEN 1 ELSE 0 END) OVER (PARTITION BY field1) as chars 
    FROM #data
    ) alias
    WHERE chars =2
    

    【讨论】:

    • 感谢您的回复,但是我们还没有学习联合,然后,其他等,所以应该有另一种方法。如果没有任何效果,我可以试试。
    • 正如 Aaron 所说,您能否提供一些示例数据以及可以接受哪些查询 - 我也认为这是家庭作业?
    猜你喜欢
    • 1970-01-01
    • 2019-12-16
    • 2020-09-26
    • 1970-01-01
    • 2016-10-08
    • 1970-01-01
    • 2012-08-22
    • 2017-04-26
    • 2021-09-22
    相关资源
    最近更新 更多