如何检查每个位置的另一个表中sql中的字符串,

时间:2019-05-07 14:08:21

标签: sql sql-server parsing

我要查找存储在单独表中的俄语数字列。俄语数字由具有多个字母的字符串组成。

问题是当我使用任何字符串函数时都会失败,因为俄语数字是由多个单词组成的。

我不仅要检查整个字符串,而且要检查整个外观。

我有一条规则,该规则检查是否有任何列仅是整数。在这里,我正在检查俄罗斯整数。如果Rule通过,它将引发错误“仅包含数字”

例如:

名称

пять83e094
пять83e094
семьvnala

俄罗斯数字 俄语

 один
два
три
четыре
пять
шесть
семь
восемь
девять
десять
ноль
сто
тысяча
NULL
NULL
миллиард
NULL
миллион

怎么做?

解决方案:

        `select n'один' Name into #TEMP union
    select n'два'                  union
    select n'три'                  union
    select n'четыре'               union
    select n'пять'                 union
    select n'шесть'                union
    select n'семь'                 union
    select n'восемь'               union
    select n'девять'               union
    select n'десять'               union
    select n'ноль'                 union
    select n'сто'                  union
    select n'тысяча'               union
    select n'NULL'                 union
    select n'NULL'                 union
    select n'миллиард'             union
    select n'NULL'                 union
    select n'миллион' 

    select n'пятьвосемь' Country into #TEMP1 union
    select n'india   '   union
    select n'japanone'  union
    select n'нольмиллиард'  union
    select n'fourone    '   union
    select n'europe '

    DECLARE
    @MAX_CNT NUMERIC,
    @MIN_CNT NUMERIC,
    @WORD_LEN_CNT NUMERIC,
    @WORD_CNT NUMERIC,
    @COUNTRY NVARCHAR(50),
    @STRING NVARCHAR(50),
    @STRING_BUFFER NVARCHAR(50),
    @IF_CNT NUMERIC;
    SET @MIN_CNT=1;
    SET @WORD_CNT=1;
    SET @STRING='';
    SET @COUNTRY='';

    BEGIN


    select @MAX_CNT =(select MAX(SEQ) Coun from (
    SELECT ROW_NUMBER()OVER(ORDER BY COUNTRY)SEQ,*  FROM #TEMP1
    )xx)


    ---------------------WHILE LOOP-----------------------------------------

    WHILE(@MIN_CNT<=@MAX_CNT)
    BEGIN
    --PRINT 1
        SELECT @COUNTRY=(select country from (
        SELECT ROW_NUMBER()OVER(ORDER BY COUNTRY)SEQ,*  FROM #TEMP1
        )xx WHERE SEQ=@MIN_CNT ) 

    --print @COUNTRY
    --PRINT @COUNTRY
    -----------------CHECKING THE WORD WHETHER NUMBER OR NOT---------------------------
        SET @WORD_LEN_CNT=LEN(@COUNTRY);
        SET @WORD_CNT=1
        SET @STRING_BUFFER=''

    -----------------SECOND WHILE LOOP-------------------------------------------------

    WHILE @WORD_CNT<=@WORD_LEN_CNT
    BEGIN
    --PRINT 2
        SELECT @STRING=SUBSTRING(@COUNTRY,@WORD_CNT,1)

        SET @STRING_BUFFER=@STRING_BUFFER+@STRING
        SET @WORD_CNT=@WORD_CNT+1
        --print @STRING_BUFFER

    -----------------CHECKING THE NUMBER PRESENT IN BASE TABLE------------------------

    SELECT @IF_CNT=COUNT(1) FROM #TEMP WHERE NAME=@STRING_BUFFER
    --print @IF_CNT
    IF @IF_CNT=1
    BEGIN

        SET @STRING_BUFFER=''
    END

    end
    IF @STRING_BUFFER='' 
    BEGIN
    --PRINT 3
    --print @COUNtry 
        PRINT 'Contains Digits'END

    SET @MIN_CNT=@MIN_CNT+1;
    end
    end'

0 个答案:

没有答案