【问题标题】:Need a query returns the records which contains different characters of a list [closed]需要查询返回包含列表不同字符的记录[关闭]
【发布时间】:2023-04-01 20:16:01
【问题描述】:

在 Sql Server 2012 上,我需要一个查询来返回包含任何不同字符的记录。

例如,我的字段名称是“描述”。如果“描述”字段中查询的任何字母包含不符合以下任何条件的任何字符,则应列出:

数字 (0-9)、字母 (a-z)、其他一些区域字母 (öçşğüıÖÇŞİĞÜ)、一些符号 (-,.&) 和空格 ()

谢谢

编辑:我在之前已关闭的帖子中问过同样的问题,我问过同样的问题并试图更具描述性。

【问题讨论】:

标签: sql sql-server sql-server-2012


【解决方案1】:

我可能会使用计数表解决方案来解决这个问题。您需要一个数字表,TVF 或物理表,但这应该可以工作

-- http://www.sqlservercentral.com/articles/T-SQL/62867/
--
WITH SRC (row_id, description) AS
(
    SELECT 1, N'normal text'
    UNION ALL SELECT 2, N'bad text ¥1,235'
    UNION ALL SELECT 3, N'normal text öçşğüıÖÇŞİĞÜ'
)
, ALLOWABLE (unicode_character) AS
(
    -- Define your known universe of allowed characters
    -- A-Z
    SELECT CAST(CHAR(GN.number + 64) AS nchar(1)) AS x
    FROM
        dbo.GenerateNumbers(26) AS GN
    UNION ALL
    SELECT CAST((GN.number -1) AS nchar(1)) AS x
    FROM
        dbo.GenerateNumbers(10) AS GN

    -- ...
    UNION ALL SELECT N' '
    UNION ALL SELECT N'ö'
    UNION ALL SELECT N'ç'
    UNION ALL SELECT N'ş'
    UNION ALL SELECT N'ğ'
    UNION ALL SELECT N'ü'
    UNION ALL SELECT N'ı'
    UNION ALL SELECT N'Ö'
    UNION ALL SELECT N'Ç'
    UNION ALL SELECT N'Ş'
    UNION ALL SELECT N'İ'
    UNION ALL SELECT N'Ğ'
    UNION ALL SELECT N'Ü'
)
, EXPLODED AS
(
    SELECT
        S.*
    ,   GN.number
    ,   SUBSTRING(S.description, GN.number, 1) AS individual_character
    FROM
        SRC S
        CROSS APPLY
            -- choose a large enough value      
            dbo.GenerateNumbers(30) AS GN  
)
SELECT
    DISTINCT
    E.row_id
,   E.individual_character      
FROM
    EXPLODED E
    LEFT OUTER JOIN
        ALLOWABLE A
        ON A.unicode_character =  E.individual_character
WHERE
    A.unicode_character IS NULL;

【讨论】:

    【解决方案2】:

    This answer 可能是一个好的开始。它展示了如何使用类似正则表达式的语法来确定某些字符是否在字段中

    编辑

    select * from [TABLE] where [FIELD] LIKE '%[^a-zA-Z0-9öçşğüıÖÇŞİĞÜ-\& \.]%'
    

    【讨论】:

    • 我怎样才能得到反转结果?我需要那些不符合表达式的。
    • 这将返回包含指定字符之外的字符的行...... [^...] 表示不在
    • 工作,非常感谢:)
    猜你喜欢
    • 1970-01-01
    • 2019-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多