• qlserver排序规则在全角与半角处理中的应用


    --1.查询区分全角与半角字符
    --测试数据
    DECLARE @t TABLE(col varchar(10))
    INSERT @t SELECT 'aa'
    UNION ALL SELECT 'Aa'
    UNION ALL SELECT 'AA'   --全角A
    UNION ALL SELECT 'A,A'  --全角A,半角逗号(,)
    UNION ALL SELECT 'A,A' --全角A,全角逗号(,)

    --1.查大写字母
    SELECT * FROM @t
    WHERE col COLLATE Chinese_PRC_CS_AS_WS like '%A%'

    --结果
    Aa

    --2.查全角字母
    SELECT * FROM @t
    WHERE col COLLATE Chinese_PRC_CS_AS_WS like '%A%'

    --结果
    AA
    A,A
    A,A

    --3.查半角逗号(,)
    SELECT * FROM @t
    WHERE col COLLATE Chinese_PRC_CS_AS_WS like '%,%'

    --结果
    A,A

    --3.查全角逗号(,)
    SELECT * FROM @t
    WHERE col COLLATE Chinese_PRC_CS_AS_WS like '%,%'
    GO

    --结果
    A,A


    --2 实现全角与半角字符转换的处理函数
    CREATE FUNCTION f_Convert(
    @str NVARCHAR(4000), --要转换的字符串
    @flag bit              --转换标志,0转换成半角,1转换成全角
    )RETURNS nvarchar(4000)
    AS
    BEGIN
     DECLARE @pat nvarchar(8),@step int,@i int,@spc int
     IF @flag=0
      SELECT @pat=N'%[!-~]%',@step=-65248,
       @str=REPLACE(@str,N' ',N' ')
     ELSE
      SELECT @pat=N'%[!-~]%',@step=65248,
       @str=REPLACE(@str,N' ',N' ')
     SET @i=PATINDEX(@pat COLLATE LATIN1_GENERAL_BIN,@str)
     WHILE @i>0
      SELECT @str=REPLACE(@str,
        SUBSTRING(@str,@i,1),
        NCHAR(UNICODE(SUBSTRING(@str,@i,1))+@step))
       ,@i=PATINDEX(@pat COLLATE LATIN1_GENERAL_BIN,@str)
     RETURN(@str)
    END
    GO

    SELECT [dbo].[f_Convert] ('AAA' ,0)

    --结果
    AAA

  • 相关阅读:
    Java泛型【转】
    沉着
    selenium 自动化测试面试题及答案
    50道JAVA基础编程练习题
    50道JAVA基础编程练习题
    Kibana+Logstash+Elasticsearch 日志查询系统
    Java中this和super的用法总结
    Tensorflow官方文档中文版——第二章(瞎奖杯写)
    LATEX ——WinEdt 破解
    超参数优化
  • 原文地址:https://www.cnblogs.com/accumulater/p/6145396.html
Copyright © 2020-2023  润新知