Как проверить строку для строки в SQL из другой таблицы для каждой позиции - PullRequest
1 голос
/ 07 мая 2019

Я хочу посмотреть столбец для русских чисел, хранящихся в отдельной таблице.Русские числа состоят из строки, состоящей из нескольких букв.

Проблема заключается в том, что при использовании любой строковой функции происходит сбой, поскольку русское число состоит из нескольких слов.

Я хочу проверитьцелая строка не только любой внешний вид.

У меня есть правило, которое проверяет, если любой столбец, как только целое число.здесь я проверяю на русский целое число.Если правило пройдет, оно выдаст ошибку «Содержит только цифры»

Например:

Имя

пять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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...