-4

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

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

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

谢谢

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

4

2 回答 2

3

我可能会使用计数表解决方案来解决这个问题。您需要一个数字表,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;
于 2013-05-28T20:59:15.127 回答
0

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

编辑

select * from [TABLE] where [FIELD] LIKE '%[^a-zA-Z0-9öçşğüıÖÇŞİĞÜ-\& \.]%'
于 2013-05-28T20:50:47.227 回答